学习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})










