知识点复习38 SpringBoot 自动配置源码分析

 

启动类加载核心方法load

1.如果是class类型,就启用注解类型

2.如果是resource类型,就使用xmlReader解析

3.如果是package类型,就启用scanner对包进行扫描

4.如果是字符串类型,就直接使用xmlReader进行解析

5.判断source是否是一个component,如果使用component注解,代表是一个bean;就包装成为一个AnnotatedGenericBeanDefinition,也是一个beanDefinition。注册到容器的beanDefinitionMap

装配开始,容器的刷新,调用refresh方法

1.继续调用invokeBeanFactoryPostProcessors

2.继续后面流程,获取ConfigurationClassPostProcessor后,开始执行BeanDefinitionRegistryPostProcessor:

3.开始执行自动装配

3.1 循环registry中的beanDefinitionNames,也就是候选的beanDefinition

  3.2  如果是配置类ConfigurationClass,就添加到configCandidates里面,然后调用parser.parse进行解析

4.递归调用doProcessConfigurationClass解析,如果有父类,也继续处理

5.

5.1 对属性配置的解析,如果里面还有注解,就继续递归解析注解包含的bean

5.2 继续递归解析import,导入的配置类

5.3 解析导入的xml配置类

5.4 有父类继续递归解析,一直到superClass为空,结束递归

6.开始执行Spring Boot 默认配置逻辑

  

7.

在获取到springBoot提供的配置后,再次调用processImports方法进行递归解析,根据我们自定义的配置文件,进行选择性配置。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@ConditionalOnBean

 

getBeanNamesForType()方法最终会委托给BeanTypeRegistry类的getNamesForType方法来获取对应的指定类型的bean name:

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值