自动配置原理
接下来将从三个方面分析Springboot3的自动配置原理:环境启动器,主程序,自动配置类。
-
导入环境启动器(此处以web环境启动器为例)
-
环境启动器中含有此环境运行所需的所有依赖
-
所有的环境启动器中都有spring-boot-starter的依赖,即为starter的starter(核心环境启动器)
-
spring-boot-starter中又有spring-boot-autoconfiguration依赖
-
spring-boot-autoconfiguration依赖中就含有所有开发场景中的自动配置类。
-
只要这个包下的类都能生效被加载到容器中,则springboot写好的整合功能就生效了。
-
但是SpringBoot自动不会扫描到spring-boot-autoconfiguration包中的组件,因为默认只会扫描主程序所在包及其子包。
-
-
所以springboot是怎么完成自动配置的呢?
首先:
在项目的启动类上有@SpringBootApplication注解,此注解包含
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan 三个注解,其中@EnableAutoConfiguration注解中有
@Import({AutoConfigurationImportSelector.class})
此@Import注解会批量导入组件到容器中
其次:
通过断点调试发现:springBoot启动默认会自动加载146个配置类
这146个配置类来自于,spring-boot-autoconfigure下的META-INF/spring/springframework.boot.autoconfigure.AutoConfiguration.imports文件中。
但这些自动配置类虽然被加载到了容器中,但其中的配置相关操作是会在特殊场景下触发,是因为在自动配置类中,使用了@ConditionalOnXXX注解。
例如:AOP的自动配置类,是需要在配置文件中,添加spring.aop.auto=true时才可以触发的。
- XXXAutoconfiguration自动配置类
-
使用@Bean给容器中放入一堆的组件
-
每一个自动配置类都有可能有@EnableConfigurationProperties(XXXProperties.Class)注解,是用于将配置文件中设置的参数,与组件的参数对应起来。就可以达到,修改配置文件对组件的参数进行调整。
-
总结:
1. 导入starter场景启动器
2. 场景启动器中,有核心场景启动器,其中又中包含有146个各个环境的自动配置类。
3. 当springboot启动时,默认会加载这146个自动配置类。
4. 自动配置类按需加载,并且与XXXProperties绑定。
5. 通过修改配置文件,修改组件中的配置值。