解析配置类-ConfigurationClassPostProcessor
2024-10-28 14:53:55 0 举报
解析配置类-ConfigurationClassPostProcessor
作者其他创作
大纲/内容
loadBeanDefinitionsFromRegistrars
将找到的资源类加载到Environment;后期可以从env中取
是
解析@ComponentScan和@ComponentScans
PostProcessorRegistrationDelegate#invokeBeanDefinitionRegistryPostProcessors
registrar.registerBeanDefinitions
ConfigurationClassParser#doProcessConfigurationClass
PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors
导入的类是ImportBeanDefinitionRegistrar子类?
加载bean定义
解析@ImportResource
提前创建ConfigurationClassParser实例
for循环所有配置类
取出BeanDefinitionNames中含有@Configuration的bean
@PropertySource思路:1、找到注解中的资源,加载到Environment中2、使用时候,从Environment取3、可以搭配@Value使用
public interface ConfigInterface { @Bean default InterfaceTest configSout(){ return new InterfaceTest(); }}
没有则返回
初始化这个类调用selectImports
事务用到了这点
处理@Conditional
解析被配置类实现接口中的默认方法
导入的类是ImportSelector子类?
parse执行完之后
依据@Order给配置类排序
解析所有配置类
再次调用
processPropertySource
解析@Import
可以导入一个普通类!如果想要spring管理第三方的jar里面的实例,可以使用@Import
此时InterfaceTest实例就是一个bean
由于@Configuration一定会有@Component所有这里是解析内部配置类的
例如:@Componentclass xxConfig{}
processImports
PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors
返回集合
parser.parse(candidates);
解析@Component
配置必须要实现它
这一步会调用ImportBeanDefinitionRegistrar的registerBeanDefinitions方法
如果解析到的类是@Configuration则走解析配置类逻辑
invokeBeanFactoryPostProcessors(beanFactory)
AOP使用到了这点
初始化该类调用加入集合
this.reader.loadBeanDefinitions(configClasses)
否
解析@PropertySource
被@ComponentScan扫描到的类或者包下的类,必须是组件类,不能是一个普通类,否则成为bean
需要注册的类的集合
调用该类的registerBeanDefinitions方法
processMemberClasses
ConfigurationClassPostProcessor#processConfigBeanDefinitions
refresh()
解析@Bean
0 条评论
下一页