简单一句话就是扫描META-INF/spring.factories下org.springframework.boot.autoconfigure.EnableAutoConfiguration的配置项,然后自动装载这些类
这里分两步讲下整个过程:
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的加载过程》