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

本文详细分析了SpringBoot2自动配置的源码,探讨了如何初始加载自动配置类并批量导入组件。重点讲解了`AutoConfigurationImportSelector`类的`selectImports`和`getAutoConfigurationEntry`方法,揭示了127个默认配置组件的加载过程。通过`loadSpringFactories`方法加载`META-INF/spring.factories`中的配置,然后依据`@ConditionalOnClass`注解实现按需装配,例如只有引入aspectj包时才会加载`AopAutoConfiguration`。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值