Springboot 自动装载组件原理

793 阅读1分钟

简单一句话就是扫描META-INF/spring.factoriesorg.springframework.boot.autoconfigure.EnableAutoConfiguration的配置项,然后自动装载这些类
在这里插入图片描述

这里分两步讲下整个过程:
1、获取需要自动装载的组件
2、加载组件

获取需要自动装载的组件

在启动类上会有@SpringBootApplication注解,该注解上有@EnableAutoConfiguration注解,这个注解importAutoConfigurationImportSelector类,该类会负责从META-INF/spring.factories读取配置项,该类实现了ImportSelector接口,在 getAutoConfigurationEntry方法里会读取配置 在这里插入图片描述

最终会调用到loadSpringFactories方法

在这里插入图片描述

加载组件

Springboot会首先加载我们项目代码中配置的bean,然后再加载自动装载的bean,因为再自动装载的bean里有很多条件注解,比如@ConditionalOnBean,在上面提到的方法里断点,就能看到调用堆栈如下:
在这里插入图片描述

其中有两个比较关键的类ConfigurationClassPostProcessorConfigurationClassParserConfigurationClassPostProcessor实现了BeanFactoryPostProcessor接口 在这里插入图片描述

这里简单梳理下大体流程,BeanFactory实例化后会回调这个后置处理器的postProcessBeanFactory方法,该方法会通过ConfigurationClassParser类解析所有的bean,其中包括自动装载的组件,Springboot后面会解析这些组件的元数据信息,包括组件里的注解,比如@Bean注解、@Conditional注解来判断是否符合加载条件等等逻辑,具体逻辑详见《Springboot之Bean的加载过程》