boot自动配置原理浅析

@EnableAutoConfiguration(自动装配的注解)

它有两个属性exclude()与excludeName(),标识排除的类

 

在该注解中引入了 (AutoConfigurationImportSelector.class)

 

 

这个类的主要作用就是筛选出所需要的配置类,在它里边有一个方法-

getAutoConfigurationEntry(AnnotationMetadata annotationMetadata)

就是筛选自动配置类的核心方法

 

主要流程为:(分析上图代码)

1、首先获取@EnableAutoConfiguration 中的注解属性

2、getCandidateConfigurations到缓存中获取自动配置类的类名

loadFactoryNames(),会根据第一个参数,只会获取跟自动配置类相关的类名

loadSpringFactories具体的逻辑代码(下图)

2.1、如果内存中有类名的集合,则直接返回

2.2、如果没有则进入try语句块

    2.2.1、首先获取所有jar包下的,所有的spring.factories文件的路径。

    2.2.2、遍历所有路径下的spring.factories文件,获取文件中的数据并以键值对的形式存入properties对象中。

    2.2.3、由于值有可能是多个,所以遍历再次properties对象,存入LinkedMultiValueMap<>()中。注:键是接口名字,值是实现类,即要生成的bean

    2.2.4、最后把所得的结果返回,并存入缓存。

这时会返回到loadFactoryNames()方法中,会根据factoryTypeName,只会获取跟自动配置类相关的实现类的类名。

3、获取了所有的实现类之后,再进行几次筛选

   3.1、removeDuplicates()去除重复的类名(导包时如果引入相同的配置,则可能会出现重复的类名,使用linkedHashSet去重)

   3.2、checkExcludedClasses()根据最开始获取的注解的属性(exclude()与excludeName()),排除不需要配置的类。

   3.3、getConfigurationClassFilter().filter(configurations);过滤掉没有引用的配置类(根据pom文件中的starter),返回list<String>集合。

4、经过层层选拔,最终剩下的实现类的全类名,就是要被自动配置的类。bean的初始化其实有spring来完成,boot只负责筛选出需要初始化的类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值