3.解析配置类(ConfigurationClassPostProcessor)
2022-04-26 10:42:07 6 举报
spring 解析配置类
作者其他创作
大纲/内容
检查是否存在配置类
构建配置类解析器
创建实例保存在当前配置类的importBeanDefinitionRegistrars集合
存在父类,返回父类当作配置类解析
完全配置类或者轻配置类加入集合 configCandidates
检查内部类是不是配置类
普通类型
当作新配置类解析
配置类中是否有@Bean
do {真正解析配置类
此处才处理@Bean的方法和@Import,注册到BeanDefinitionMap中
parser.parse(candidates);
检查配置类是否有@ImportResource
while
移除已经解析过的
processConfigBeanDefinitions(registry);
doProcessConfigurationClass
是实现ImportBeanDefinitionRegistrar
将所导入的xml文件路径添加到当前配置类的importedResources属性中
检查配置类实现接口中是否有@Bean
解析该新的配置类
selectImports()方法返回的类再次调用processImports()方法
将@Bean修饰的方法封装为BeanMethod对象,并添加到当前配置类的beanMethods属性中
再检查新增的是不是配置类,是的话加入到集合configCandidates
是实现ImportSelector
配置类上是否有@ComponentScan
循环遍历
checkConfigurationClassCandidate
是DeferredImportSelector类型
this.reader.loadBeanDefinitions(configClasses);
判断是完全配置类:@Configuration或者轻配置类:Component、ComponentScan、Import、ImportSource打上full或者lite标记
是普通的ImportSelector
解析新的配置类
processConfigurationClass
循环配置类
循环解析
获取容器目前的bean定义
扫描并注册bean定义
processImports()// 处理@Import
表示推迟的,会在当前配置类的所有配置类都解析完再执行
do {解析配置类
0 条评论
下一页