03SpringBoot原理分析

目录

一、SpringBoot原理分析_起步依赖

1. 查看spring-boot-starter-parent起步依赖

2. 查看spring-boot-starter-web起步依赖

二、SpringBoot原理分析_自动配置

 三、SpringBoot原理分析_核心注解

 @SpringBootApplication

@SpringBootConfiguration

@EnableAutoConfiguration

@AutoConfigurationPackage

@Import({AutoConfigurationImportSelector.class})

@ComponentScan

四、知识点整理:

一、SpringBoot原理分析_起步依赖

03SpringBoot原理分析_第1张图片

1. 查看spring-boot-starter-parent起步依赖

1.按住 Ctrl 点击 pom.xml 中的 spring - boot - starter - parent ,跳转到了 spring - boot - starter- parent pom.xml ,发现 spring - boot - starter - parent 的父工程是 spring - boot  dependencies
03SpringBoot原理分析_第2张图片

2. 进入 spring-boot-dependencies pom.xml 可以看到,一部分坐标的版本、依赖管理、插件管理已经定义好,所以SpringBoot工程继承 spring-boot-starter-parent 后已经具备版本锁定等配置了。所以起步依赖的作用就是进行依赖的传递

03SpringBoot原理分析_第3张图片

2. 查看spring-boot-starter-web起步依赖

2.按住 Ctrl 点击 pom.xml 中的 spring - boot - starter - web ,跳转到了 spring - boot - starter - web pom.xml ,从 spring - boot - starter - web pom.xml 中我们可以发现, spring - boot- starter - web 就是将 web 开发要使用的 spring - web spring - webmvc 等坐标进行了打包,这样我们的工程只要引入 spring - boot - starter - web 起步依赖的坐标就可以进行web 开发了,同样体现了依赖传递的作用。
03SpringBoot原理分析_第4张图片

二、SpringBoot原理分析_自动配置

03SpringBoot原理分析_第5张图片

1.查看注解 @SpringBootApplication 的源码

 03SpringBoot原理分析_第6张图片

 @SpringBootConfifiguration:等同与@Confifiguration,即标注该类是Spring的一个配置类

@EnableAutoConfifigurationSpringBoot自动配置功能开启

2.查看注解 @EnableAutoConfifiguration 的源码

03SpringBoot原理分析_第7张图片

 3.查看AutoConfifigurationImportSelector源码

 SpringFactoriesLoader.loadFactoryNames 方法的作用就是从 META-INF/spring.factories文件中读取指定类对应的类名称列表

4.点开 spring-boot-autoconfigure spring.factories 文件

03SpringBoot原理分析_第8张图片

 有关配置类的信息如下:

03SpringBoot原理分析_第9张图片

 上面配置文件存在大量的以 Configuration 为结尾的类名称,这些类就是存有自动配置信息的类,而 SpringApplication 在获取这些类名后再加载。

5.我们以ServletWebServerFactoryAutoConfifiguration 为例来分析源码:

03SpringBoot原理分析_第10张图片

 @EnableConfifigurationProperties(ServerProperties.class) 代表加载 ServerProperties服务器配置属性类。

6.进入 ServerProperties 类源码如下:

03SpringBoot原理分析_第11张图片
prefifix = "server" 表示 SpringBoot 配置文件中的前缀, SpringBoot 会将配置文件中以server 开始的属性映射到该类的字段中。所以配置网络端口的方式为 server.port

7.如果我们没有在配置文件中配置默认端口,SpringBoot就会读取默认配置,而默认配置存放在 META-INF/spring-configuration-metadata.json中,打开 spring-boot-autoconfigure spring.factories 文件

03SpringBoot原理分析_第12张图片

 该文件中保存的就是所有默认配置信息,其中tomcat服务端口默认为8080,我们可以在application.properties配置文件中配置server.port=xxxx来修改默认端口号。

03SpringBoot原理分析_第13张图片

 三、SpringBoot原理分析_核心注解

03SpringBoot原理分析_第14张图片

 @SpringBootApplication

标注是 SpringBoot 的启动类。
此注解等同于 @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan ,因为@SpringBootApplication注解下包含了这三个注解。

@SpringBootConfiguration

@SpringBootConfiguration @Configuration 的派生注解,跟 @Configuration 功能一致,标注这个类是一个配置类,只不过 @SpringBootConfiguration 是Springboot的注解,而 @Configuration Spring 的注解

@EnableAutoConfiguration

SpringBoot 自动配置注解。
等同于 @AutoConfigurationPackage + @Import(AutoConfigurationImportSelector.class)

@AutoConfigurationPackage

自动扫描包的注解,它会自动扫描主类所在包下所有加了注解的类,如:(@Controller @Service 等),以及配置类(@Configuration )。

@Import({AutoConfigurationImportSelector.class})

该注解会导入 AutoConfifigurationImportSelector 类对象,该对象会从 META -INF/spring.factories 文件中读取配置类的名称列表。

@ComponentScan

该注解会扫描项目,自动装配一些项目启动需要的 Bean

四、知识点整理:

1. 在SpringBoot中,起步依赖的作用是“依赖传递”
2. SpringBoot的配置类信息保存在文件 spring.factories
3.SpringBoot的默认配置信息保存在文件 spring-configuration-metadata.json
4.在SpringBoot 中, @SpringBootApplication 写在“启动类上方”
5.在SpringBoot 中, @SpringBootConfiguration 的作用和 @Configuration 一致

你可能感兴趣的:(SpringBoot,java,spring,开发语言)