【Spring源码系列- IOC】
本文目录
checkConfigurationClassCandidate()方是用来检查给定的BeanDefinition是否是一个配置类的候选者(或一个在配置/组件类中声明的嵌套组件类),并对其进行相应的标记处理的 第一步,当然是先获取bean定义信息中的class类名,不符合要求则直接返回false
由于通过注解注入的BeanDefinition都是AnnotatedGenericBeanDefinition,实现了AnnotatedBeanDefinition,而Spring内部的BeanDefinition都是RootBeanDefinition,实现了AbstractBeanDefinition checkConfigurationClassCandidate()方法在获取到class类名以后,则先判断了是否实现了AnnotatedBeanDefinition(通过注解注入的BeanDefinition)
再判断了是否实现了AbstractBeanDefinition(Spring内部的BeanDefinition)
从上述代码可以看出,有4种类是不在此进行处理的(原因是什么? 欢迎了解的大佬指导.抱拳.gif):
-
BeanFactoryPostProcessor.class
-
BeanPostProcessor.class
-
AopInfrastructureBean.class
-
EventListenerFactory.class
如果上述两种情况都不符合,就直接获取className的MetadataReader实例,读取底层类的完整注解元数据
处理完上述3种情况后,获取被@Configuration注解标注的Bean Definition的元数据属性的字典值
-
如果字典值为proxyBeanMethods的属性值为false且被@Configuration注解修饰,则将其configurationClass属性值设为full
-
如果是被isConfigurationCandidate()方法中列出的注解修饰,则将其configurationClass属性值设为lite
isConfigurationCandidate()详解
检查是否被特定注解修饰,这里的特定的包含4个:
-
Component.class
-
ComponentScan.class
-
Import.class
-
ImportResource.class
关于”full” & “lite”
-
“full”用于修饰@Configuration注解修饰的注解类
-
“lite”用于修饰非@Configuration注解修饰的注解类
最后,设置bean的order值
(*≧ω≦)🎉🎉🎉
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135411.html