SpringBoot 自动配置原理“再探”

引导加载配置类

在这里插入图片描述
在这里插入图片描述

SpringBootConfiguration 表示当前是一个配置类
ComponentScan 包扫描 里面有两个 扫描器(可以细了解其用法 这里不做多描述)

重点 EnableAutoConfiguration

进入EnableAutoConfiguration
在这里插入图片描述
1.AutoConfigurationPackage 自动配置包
在这里插入图片描述
import({Registrar.class}) 往容器中注入名 Registrar的组件
利用Registrare组件 往容器中导入一系列的组件

在这里插入图片描述

AnnotationMetadata metadata 注解的元信息

在这里插入图片描述
在这里插入图片描述

获取包名 在这里插入图片描述

所以这一句代码的整体意思就是 把cn(主函数(main))这个包下所有带有注解的组件 导入进容器

EnableAutoConfiguration 中第二个核心注解@Import({AutoConfigurationImportSelector.class})

在这里插入图片描述
再一次往容器中批量导入组件

进入AutoConfigurationImportSelector

在这里插入图片描述
利用 里面的getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一批组件 (所有自动配置的组件)
在这里插入图片描述
获取所有候选的配置 返回 List configurations
在这里插入图片描述
configurations 集合里面所有候选的自动配置的数据
在这里插入图片描述

List configurations = this.getCandidateConfigurations(annotationMetadata, attributes);进入这个方法

在这里插入图片描述
再一次进入
在这里插入图片描述
利用工厂加载 下面这个(调用下面这个方法)
在这里插入图片描述
从这个位置加载文件(META-INF/spring.factories)默认会扫描当前系统里面所有META-INF/spring.factories位置的文件
在这里插入图片描述在这里插入图片描述
文件里面写死了SpringBoot一启动 就要给容器中加载的配置类

虽然这写死的配置类启动场景是写死的默认全部加载但是最终会按需配置(通过条件注解来控制)

在这里插入图片描述

总结

1.springboot先加载所有的自动配置类
2.每个自动配置类 安装条件注解 中的条件进行生效
3. 如果自动类生效 就会在容器中注入相应场景的组件 拥有对应的功能
4. 只要用户有自己配置的就以用户优先 为什么这么说 因为 有的能替换的组件上面的条件有的是 用过没有这个组件 才配置 组件 列如 这种情况的这个注解 就可以自己创建一个bean来替代他 因为 通过前面可以得出 加载的时候先加载用户自己写的 主函数所在的包的下面的所有组件 后才加载 自动配置的 所以 自己写了可以替代的bean之后 后面自动配置类的相应的bean就不会生效 就替代了原本默认的了 在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值