一、自动配置流程:
2.1.什么是按需加载所有的自动配置项:
- 1.SpringBoot中有非常多的starter,我们只有引入了这个场景的场景启动器,自动配置才会开启
- 2.场景启动器除了会导入相关功能依赖,还都会导入一个spring-boot-starter,
是所有starter的starter
,基础核心starter - 3.spring-boot-starter导入了一个包 spring-boot-autoconfigure
SpringBoot所有的自动配置功能都在spring-boot-autoconfigure 包里面
- 虽然全场景的自动配置都在 spring-boot-autoconfigure这个包,但不是全都开启生效的
- 4.在
org.springframework.boot.autoconfigure包
下面可以看到各组件的一些自动配置
- 5.在 SpringBoot 的自动配置autoconfigure包中 , 一般是
XxxAutoConfiguration.java
, 对应XxxxProperties.java
, 如图
1.1.定位xxxxAutoConfiguration位置:
- 1.引入开发所需要的场景启动器后,就会导入相关场景的所有依赖 -> 每个场景启动器都引入了一个
spring-boot-starter
,这个是核心场景启动器 -> 核心场景启动器引入了spring-boot-autoconfigure包
- 2.spring-boot-autoconfigure里面包含了所有场景的所有配置
- 3.在所有场景的配置中,都有xxxxAutoConfiguration自动配置类:
1.2.总结:
- SpringBoot先加载所有的自动配置类
- 每个自动配置类都是按照条件进行生效的
- 生效的配置类就会给容器中装配很多个组件
- 只要容器中有这些组件,就相当于这些功能就具有了
二、属性绑定:
2.1.分析@EnableConfigurationProperties(ServerProperties.class):
- 1.每个自动配置类都可能有注解
@EnableConfigurationProperties(ServerProperties.class)
,用来把配置文件中配的指定前缀的属性值封装到 xxxProperties属性类中 - 2.在容器中
使用@Bean放一堆组件
2.2.举例:
- 1.以Tomcat为例:把服务器的所有配置都是以server开头的,配置都封装到了属性类中
- 2.给容器中放的所有组件的一些核心参数,都来自于xxxProperties。xxxProperties都是和配置文件绑定,只需要改配置文件的值,核心组件的底层参数都能修改
三、自定义类绑定配置提示:
4.1.自定义类:
4.2.配置绑定:
a.问题描述:
- 我们在配置文件与自定义类绑定的时候,没有任何提示,不是很友好,我们需要引入依赖进行解决
b.引入依赖:
c.测试:
四、总结SpringBoot开发时的核心流程:
- 1.导入starter,就会导入autoconfigure包
- 2.autoconfigure 包里面 有一个文件
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
,里面指定的所有启动要加载的自动配置类 - 3.@EnableAutoConfiguration 会自动的把上面文件里面写的所有自动配置类都导入进来
- 4.然后xxxAutoConfiguration 回按照条件注解进行按需加载
- 5.xxxAutoConfiguration给容器中导入一堆组件,组件都是从 xxxProperties中提取属性值,xxxProperties又是和配置文件进行了绑定