SpringBoot配置类解析主流程
- 配置类解析入口
-> refresh()
-> invokeBeanFactoryPostProcessors(beanFactory)
-> ConfigurationClassPostProcessor
-> postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) - postProcessBeanDefinitionRegistry 方法逻辑
-> 获得BeanDefinition的唯一id:registryId
-> 检查一下registryId是否已处理过
-> 添加registryId到已处理集合中
-> processConfigBeanDefinitions -
processConfigBeanDefinitions方法逻辑
循环体执行流程
-> ConfigurationClassParser#parse
-> ConfigurationClassParser#validate
-> 读取BeanMethod注册BeanDefinition
-> 处理新引入的BeanDefinition
doProcessConfigurationClass
-
内部类
配置类内部再使用@Configuration定义的内部类会继续进行配置类解析 -
PropertySource
用法:@PropertySource({demo.properties})
遍历指定路径,替换占位符,加载资源,将资源添加到environment -
ComponentScan
@ComponentScan(basePackages={"pkgA","pkgB"},basePackageClasses={"A.class","B.class"})
basePackageClasses:扫描指定类所在的包
没设置扫描路径的话,扫描配置类所在路径
过滤顺序:excludeFilters-> includeFilters -> false -
Import
ImportSelector.class&DeferredImportSelector.class
处理以上两个接口实现selectImports返回的类名数组 -
ImportResource
处理xyz.xml配置文件 -
BeanMethod
@Bean注解的方法处理 -
接口默认方法
@Bean
default A getA(){} -
父类
不为null
不以java开头
未处理过
网友评论