全局流程解析
配置类解析入口
postProcessBeanDefinitionRegistry逻辑
processConfigBeanDefinitions逻辑
执行逻辑解析
执行入口
ConfigurationClassPostProcessor.processConfigBeanDefinitions()
方法中的do while
循环体中
循环体逻辑
parse方法调用链
doProcessConfigurationClass
- 处理内部类
- 处理
PropertySource
注解 ComponentScan
指定的路径进行扫描- 处理
Import
注解 - 处理
ImportResource
- 转换bean的方法
BeanMethod
- 处理接口的默认方法
- 处理父类
核心方法解析
内部类处理
org.springframework.context.annotation.ConfigurationClassParser#processMemberClasses
PropertySource处理
org.springframework.context.annotation.ConfigurationClassParser#processPropertySource
- 用法:
@PropertySource({"demo.properties"})
- 遍历指定路径,替换占位符,加载资源
- 将资源添加到
environment
中
ComponentScan处理
@ComponentScan(basePackages = ({"pkgA","pkgB"}), basePackageClasses = ({A.class, B.class})
- 没设置扫描路径的话使用配置类所在路径
- 过滤顺序: excludeFilters -> includeFilters -> false
Import处理
ImportSelector.class
&DeferredImportSelector.class
- 处理以上两个接口实现
selectImports
返回的类名数组 DeferredImportSelector
接口调用优先级低于其他接口- 处理
ImportBeanDefinitionRegistrar
实现中注册的bean - 处理
@Import(A.class)
ImportResource处理
@ImportResource("xyz.xml")
- 将注解属性值放入
importedResources
中 - 后续
loadBeanDefinitionsForConfigurationClass
中加载定义的bean
BeanMethod处理
- 构造
BeanMethod
对象放入配置类属性中后续处理
接口默认方法处理
父类处理
- 一: 不为null
- 二: 全路径名不以java开头
- 三: 尚末处理过
面试题
- 配置类是什么?起到什么作用?
- 请举例一些常用的配置注解?
- 介绍下SpringBoot框架对配置类的一个处理流程?
- 你能说出其中它其中的一些关键类和方法么?
- 配置类的处理一般包括哪些内容?
- 详细的一些注解处理过程?如
Import
注解?