07. Spring Framework ConfigurationClassPostProcessor
2022-03-13 20:27:47 0 举报
AI智能生成
登录查看完整内容
Spring ConfigurationClassPostProcessor 处理流程
作者其他创作
大纲/内容
checkConfigurationClassCandidate解析配置类,判断是 full 模式还是 lite 模式
将这些配置类根据 Order 排序
processMemberClasses()处理 @Component 注解
PropertySource()处理 @PropertySources、@PropertySources 注解
scanCandidateComponents()真正的扫描处理,可以根据各种过滤器进行筛选并最终将符合条件的类转成 BeanDefinition 返回
findCandidateComponents()查找到所有的候选组件
scanner.doScan()根据 basePackage 获取到所有扫描到的组件注册到 Spring 的【beanDefinitionMap】工厂中
componentScanParser.parse()处理 @ComponentScans、@ComponentScan 注解
包扫描处理考虑到扫描过程中可能还会遇到 config 配置类所以这里会把所有已解析的类进行校验是否是 config 配置类如果是配置类,那么会再次调用 parse() 进行解析
processImports()处理 @Import 注解
addImportedResource()处理 @addImportedResource 注解
retrieveBeanMethodMetadata()处理 @Bean 注解
doProcessConfigurationClass()处理配置类
configurationClasses添加到中 map 集合中,后面的步骤会处理
processConfigurationClass()继续解析
parser.parse(candidates)解析前面步骤筛选出来的配置类
registerBeanDefinitionForImportedConfigurationClass()如果类是被 @Import 导入的,就注册到【beanDefinitionMap】中
loadBeanDefinitionsForBeanMethod()把被 @Bean 注解标注的方法注册到【beanDefinitionMap】中
loadBeanDefinitionsFromImportedResources()处理 @ImportResource 注解导入的 xml 文件
registerBeanDefinitions()回调 ImportBeanDefinitionRegistrar 的 registerBeanDefinitions() 方法相当于交给用户自己注册
loadBeanDefinitionsFromRegistrars()处理 【ImportBeanDefinitionRegistrar】类型
loadBeanDefinitionsForConfigurationClass()处理配置类
this.reader.loadBeanDefinitions(configClasses)循环处理所有的配置类
processConfigBeanDefinitions()此时 registry 中已经注册了部分 BeanDefinition从容器中循环所有 BeanDefinition,解析出配置类【SpringConfig】
postProcessBeanDefinitionRegistry()它是 BeanFactoryPostProcessor 处理器,所以会回调这个方法
isFullConfigurationClass()筛选出被 @Configuration 注解的配置类
BeanMethodInterceptor方法拦截器分析
BeanFactoryAwareMethodInterceptor
代理类分析
createClass()创建代理类
enhanceConfigurationClasses()判断是否需要对配置类做代理增强判断依据为是不是 full 模式
postProcessBeanFactory()它是 BeanFactoryPostProcessor 处理器,所以会回调这个方法
ConfigurationClassPostProcessorSpring 中非常核心的一个 BeanFactory 后置处理器
0 条评论
回复 删除
下一页