ConfigurationClassPostProcessor
2025-06-13 11:01:06 0 举报
spring boot 配置类解析 流程图
作者其他创作
大纲/内容
shouldSkip()
getImports()
@AutoConfigurationPackage
invokeBeanFactoryPostProcessor
processCommonDefinitionAnnotations()
parser.parse()
parse @Bean
@SpringBootApplication
processSuperclass()
enhanceConfigurationClasses()
是
检查配置类筛选出加了@Configuration 或 @Component注解的类
componentScanParser.parse()
parser.validate()
ImportSelector.class
process @Bean
process interfaces
conditionEvaluator.shouldSkip()
processConfigurationClass()
isConfigurationCandidate()
invokeBeanDefinitionRegistryPostProcessors
mergeImportedBy
有@Import注解
@EnableAutoConfiguration
processInterfaces()
//...
已存在配置类是@Import
scanner.doScan()
筛选配置类
@Component
addBeanPostProcessor(...)
collectImports()
return
@Import(AutoConfigurationImportSelector.class)
是否有Conditional类型注解
待更新将找出的@Import主键类进行处理
@EnableEurekaServer
false
condition.matches()
loadBeanDefinitionsFromImportedResources()
当前配置类是@Import
processMemberClass()
递归找出所有@Import注解导入的类
是否跳过解析
@Configuration
否
@Component@ComponentScan@Import@ImportResource@Bean定义的方法
asSourceClass()
loadBeanDefinitionsForConfigurationClass()
process @Bean Method
processImports()@Import、@ImportResource
parse()ConfigurationClassParser.java
configCandidates.sort()
解析配置类入栈、解析、出栈
process @ComponentScan
是接口?
@Import(EurekaServerMarkerConfiguration.class)
imports.addAll() 获取所有的import注解
doProcessConfigurationClass()
processPropertySoruce
registerImport() 递归解析import进来的类
registerBeanDefinitionForImportedConfigurationClass()
process @ImportResource
@Component@ComponentScan@Import@ImportResource
...
配置类已存在
true
processConfigBeanDefinitions()ConfigurationClassPostProcessor.java
解析配置类Parse each @Configuration class
getCondition()
loadBeanDefinitionsForBeanMethod()
doProcessCofigurationClass
@ComponentScan
ImportBeanDefinitionRegistrar.class
checkConfigurationClassCandidate()
processPropertySource()
process @Import
@Import(AutoConfigurationPackages.Registrar.class)
factoryId已注册
找出所有配置类
递归解析配置类及其父类
new ImportAwareBeanPostProcessor()
ConfigurationClassPostProcessor.java
deferredImportSelectorHandler.process()
有这些注解?
有@Bean定义的方法?
reader.loadBeanDefinitaions()
processMemberClass
processImportResource()
解析配置类
loadBeanDefinitionsFromRegistrars()
0 条评论
下一页
为你推荐
查看更多