文章目录
简单一句话就是扫描
META-INF/spring.factories
下
org.springframework.boot.autoconfigure.EnableAutoConfiguration
的配置项,然后自动装载这些类
![在这里插入图片描述](https://img-blog.csdnimg.cn/df178de5346b4713a26595e255de5743.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bOw6ams,size_20,color_FFFFFF,t_70,g_se,x_16)
这里分两步讲下整个过程:
1、获取需要自动装载的组件
2、加载组件
获取需要自动装载的组件
在启动类上会有@SpringBootApplication
注解,该注解上有@EnableAutoConfiguration
注解,这个注解import
了AutoConfigurationImportSelector
类,该类会负责从META-INF/spring.factories
读取配置项,该类实现了ImportSelector
接口,在
getAutoConfigurationEntry
方法里会读取配置
最终会调用到loadSpringFactories
方法
加载组件
Springboot会首先加载我们项目代码中配置的bean,然后再加载自动装载的bean,因为再自动装载的bean里有很多条件注解,比如@ConditionalOnBean
,在上面提到的方法里断点,就能看到调用堆栈如下:
其中有两个比较关键的类ConfigurationClassPostProcessor
和ConfigurationClassParser
:
ConfigurationClassPostProcessor
实现了BeanFactoryPostProcessor
接口
这里简单梳理下大体流程,BeanFactory
实例化后会回调这个后置处理器的postProcessBeanFactory
方法,该方法会通过ConfigurationClassParser
类解析所有的bean,其中包括自动装载的组件,Springboot后面会解析这些组件的元数据信息,包括组件里的注解,比如@Bean注解、@Conditional注解来判断是否符合加载条件等等逻辑,具体逻辑详见《Springboot之Bean的加载过程》