扫描注解流程
2024-07-17 03:45:38 0 举报
登录查看完整内容
ConfigurationClassPostProcessor扫描注解
作者其他创作
大纲/内容
直到执行ConfigurationClassPostProcessor中的postProcessBeanDefinitionRegistry
处理子流程
处理处理@Bean注解
如果是实现了ImportBeanDefinitionRegistrar接口的bd
处理处理@ImportResource注解
递归处理当前类所实现的接口,接口中的方法可以有自己的默认实现,因此如果这个接口的方法加了@Bean注解,也需要被解析
递归解析父类
存在
每个ConfigurationClass解析完了之后,把ConfigurationClass对象添加到configurationClasses中
如果是
处理加了@Bean注解的方法,将@Bean方法转化为BeanMethod对象,保存再集合中
Import引入的类是否是ImportSelector子类
把AppConfig封装为一个processConfigurationClass方法
处理完方法体后
扫描指定路径得到BeanDefinition集合
如果Import的类型是普通类,则将其当作带有@Configuration的类一样处理调用processConfigurationClass()方法
是否存在@Component注解
processConfigBeanDefinitions(registry);
判断是不是一个配置类
递归调用processConfigurationClass()方法,处理新的配置类
放到当前configClass的importBeanDefinitionRegistrars属性中
判断导入的Class的类型
把AppConfig封装为一个ConfigurationClass
调用processImports方法处理导入的类
将完全填充好的ConfigurationClass实例转化为BeanDefinition注册入IOC容器
AppConfig中是否存在内部类
创建ConfigurationClassParser对象
遍历所有内部类
生成对应的ImportBeanDefinitionRegistrar的实例对象
递归处理,被Import进来的类也有可能有@Import注解processImports()方法
如果配置类上加了@PropertySource注解,那么就解析加载properties文件,并将属性添加到spring上下文中
获取所有的ConfigurationClass取出来
解析AppConfig对应的BeanDefinition
内部类也是配置类
配置类解析流程
parse()方法会递归调用processConfigurationClass()方法,处理新的配置类
遍历BeanDefinition
parser.parse(candidates)
普通类型
导入spring的配置文件
配置解析的流程如下
invokeBeanFactoryPostProcessors(beanFactory)
执行selectImports()方法,获取引入的类
遍历未再次处理过的ConfigurationClass
无论是否存在
再次调用该方法
处理@Import注解
注册配置类的bean定义信息
同一个方法
处理@ComponentScan注解
![扫描注解流程](https://www.processon.com/chart_image/template/thumb/6696cde2738ef2372ce85829.png?tid=669502eae67b4846141fa0f1)
收藏
![spring基于注解大致全体流程图](https://www.processon.com/chart_image/template/thumb/663b245e4d751b084522ebcc.png?tid=661043b0553b19665c7b70e9)
收藏
0 条评论
回复 删除
下一页