Spring boot 2 深入分析invokeBeanFactoryPostProcessors

 

1.循环入参的beanFactoryPostProcessors,增加到bean注册的集合registryProcessors,或者regularPostProcessors

2.首先执行类型为PriorityOrdered的BeanDefinitionRegistryPostProcessor,优先执行:获取bean,增加到当前的注册bean集合

3.其次执行类型为Ordered的BeanDefinitionRegistryPostProcessor,也是获取bean,增加到当前的注册bean集合

4.最后循环执行类型不为PriorityOrdered,Ordered类型的BeanDefinitionRegistryPostProcessor,处理过程同上

5.执行父类方法,优先执行注册处理类

 

开始自动装配

1.循环注册好的bean列表candidateNames,如果已经配置好了,就跳过去,汇总出需要配置的类列表

2.把这些需要配置的类进行排序

3.循环每个进行解析,调用parser.parse()

4.循环每个需要解析的beanDefinitionHolder,根据注解bean,抽象bean或者其他bean,分别各自parse解析

5.循环处理这些bean,调用doProcessConfigurationClass

6.处理内部类逻辑,由于传来的参数是我们的启动类,不含内部类,所以跳过。

7.然后对属性配置的解析

8.然后根据启动类 @ComponentScan 注解来扫描项目中的bean

9.递归解析。所有的bean,如果有注解,会进一步解析注解中包含的bean

10.这里又是一个递归解析,获取导入的配置类。很多情况下,导入的配置类中会同样包含导入类注解。

11.解析导入的 xml 配置类

12.处理 单独的 @Bean修饰的方法

13.处理接口中的默认方法

14.继续处理父类

15.递归执行后,没有父类了,就结束递归

继续深入看parse的逻辑

 

1.首先初始化 ClassPathBeanDefinitionScanner

2.设置beanNameGenerator

3.设置scopedProxyMode

4.设置resourcePattern

5.设置includeFilter和excludeFilter

6.检查是否是懒加载,如果是,beanDefinition设置懒加载为true

7.获取扫描的basePackages

8.根据获取的basePackages,进行扫描,获取包路径下的candidates

9.循环每个candidates,先解析scope元数据

10.然后生成beanName

1.解析出属性

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值