SpringBoot的自动化配置原理

1.启动类上有一个注解,是一个复合注解,由三个注解组成

第一个注解是@SpringBootConfiguration,底层是一个@Configuration注解,表示当前类是一个配置类

第二个注解是@ComponentScan是一个组件扫描,spring会扫描引导类所在包及子包下的组件

第三个注解是@EnableAutoConfiguration

注解@EnableAutoConfiguration点进去之后会有一个注解@Import,属性是AutoConfigurationImportSelector.class

AutoConfigurationImportSelector类点进去后有一个selectImports方法,里面有一个getAutoConfigurationEntry方法,返回一个配置类的键值对,然后将这个键值对转换为一个字符串数组进行返回

getAutoConfigurationEntry方法点进去后有一个getCandidateConfigurations方法,会返回一个泛型为String的List集合

getCandidateConfigurations方法中new了一个集合,其中的元素为SpringFactoriesLoader类中的loadFactoryNames方法返回的字符串集合

自动配置类需要在这两个配置文件中


loadFactoryNames方法的第一个参数为getSpringFactoriesLoaderFactoryClass方法,这个方法返回的就是EnableAutoConfiguration.class

进入到loadFactoryNames方法,获取传入的EnableAutoConfiguration的全类名,并使用loadSpringFactories方法进行返回


从指定类加载器中获取一个集合,扫描META-INF/spring.factories文件中的资源

注册自动配置包名

一些自动配置类的条件

总结
1:启动类上有一个注解,是一个复合注解,由三个注解组成
第一个注解是@SpringBootConfiguration,底层是一个@Configuration注解,表示当前类是一个配置类

第二个注解是@ComponentScan是一个组件扫描,spring会扫描引导类所在包及子包下的组件

第三个注解是@EnableAutoConfiguration
底层是通过@Import注解导入一个AutoConfigurationImportSelector配置类,这个配置类会自动调用selectImports方法,这个方法会扫描META-INF/spring.factories的文件中key为EnableAutoConfiguration的所有数据,同时还会扫描META-INF/spring/org.springframework.boot.autoconfiguration.AutoConfiguration.imports中的数据,再经过@ConditionalXxx的条件判断,把满足条件的内容加载到内存中,封装成一个字符串数组

2.启动类中的run方法
这个方法会把上面注解实现加载到到内存中的字符串数组,根据条件,反射创建对象,把对象当做bean注入spring容器中

posted @ 2024-02-01 20:52  狗狗没有坏心眼  阅读(17)  评论(0编辑  收藏  举报