0
点赞
收藏
分享

微信扫一扫

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


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

第一个:

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

第二个:

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

第三个:

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

之前讲的是第三个:AutoConfigurationPackage

现在准备将它下面的:@Import(AutoConfigurationImportSelector.class)

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


看源码:

看一下这个类:

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


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


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

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


这个方法的作用是确定我们到底要给容器里面导入哪些组件呢?

都在返回值String数组里面。

研究这个方法:getAutoConfigurationEntry

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


这个方法是核心方法。

利用这个方法给容器中批量导入一些组件:

研究这个方法getAutoConfigurationEntry来确定导入的是哪些组件呢?

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


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

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


一共有127个值。

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


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

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


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

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


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


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

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


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


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


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

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


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


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

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


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

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

数量:

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


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


148-21+1 = 127个

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


所以这些127个自动装配的组件是在配置文件里面写死了。

总结:

文件里面写死了springboot一启动就要给容器中加载的所有配置类(127)。

虽然我们127个场景的所有自动配置启动的时候默认全部加载最终会按需配置。

例如:

看这个类:AopAutoConfiguration

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


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


这个注解的意思就是:

只有有Advice这个类才会加载这个配置。

什么时候才会有Advice这个类呢?

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


发现你只有导了aspectj包的时候才会有Advice这个类。

springboot加载的核心:
启动的时候加载所有的配置组件(配置文件里面写死了)
但是最终按照条件装配规则进行按需分配:注解@ConditionalOnClass({xxx.class})


举报

相关推荐

0 条评论