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

 

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

启动类加载核心方法load

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

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

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

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

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

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.

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

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

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

5.3 解析导入的xml配置类

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

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

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

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

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

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

@ConditionalOnBean

 

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

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

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