学习springboot2的第5天(2021-12-04)14-自动配置【源码分析】初始加载自动配置类
第一个:

第二个:

第三个:

之前讲的是第三个:AutoConfigurationPackage
 现在准备将它下面的:@Import(AutoConfigurationImportSelector.class)

 看源码:
 看一下这个类:


 这个类它有一个方法叫做:selectImports

 这个方法的作用是确定我们到底要给容器里面导入哪些组件呢?
 都在返回值String数组里面。
 研究这个方法:getAutoConfigurationEntry

 这个方法是核心方法。
 利用这个方法给容器中批量导入一些组件:
 研究这个方法getAutoConfigurationEntry来确定导入的是哪些组件呢?

 这个方法里面有一个很核心的变量configurations 

 一共有127个值。

 说明这127个组件默认都是要导入到容器里面的。

 这个方法getCandidateConfigurations是获取所有需要导入到容器里面的组件。


 利用工厂加载得到所有组件。



 最终还是需要看方法loadSpringFactories来看到底加载了哪些组件。第一次执行的时候result为null


 默认当前系统里面所有META-INF/spring.factories位置的文件。



数量:


 148-21+1 = 127个

 所以这些127个自动装配的组件是在配置文件里面写死了。
 总结:
 文件里面写死了springboot一启动就要给容器中加载的所有配置类(127)。
虽然我们127个场景的所有自动配置启动的时候默认全部加载最终会按需配置。
例如:
 看这个类:AopAutoConfiguration


 这个注解的意思就是:
 只有有Advice这个类才会加载这个配置。
 什么时候才会有Advice这个类呢?

 发现你只有导了aspectj包的时候才会有Advice这个类。
springboot加载的核心:
 启动的时候加载所有的配置组件(配置文件里面写死了)
 但是最终按照条件装配规则进行按需分配:注解@ConditionalOnClass({xxx.class})
                










