【Spring源码系列- IOC】
像之前介绍CommonAnnotationBeanPostProcessor一样的,我们进入applyMergedBeanDefinitionPostProcessors()方法中的循环中,当遍历的BeanPostProcessor为AutowiredAnnotationBeanPostProcessor时,就开始了我们这篇文章⁄(⁄ ⁄ ⁄ω⁄ ⁄ ⁄)⁄~~~
进入bdp.postProcessMergedBeanDefinition(mbd, beanType, beanName),找到AutowiredAnnotationBeanPostProcessor实现类
于是我们来到了AutowiredAnnotationBeanPostProcessor.postProcessMergedBeanDefinition()
findAutowiringMetadata()
方法中,先从缓存中获取该类的信息,进而根据获取到的metadata判断是否需要刷先缓存,如果需要则通过构建buildAutowiringMetadata()方法自动装配的属性和方法元数据
buildAutowiringMetadata()
先判断给定的类是否带有指定的注解
这里的autowiredAnnotationTypes会在AutowiredAnnotationBeanPostProcessor的构造函数中进行赋值
从上图可以看到autowiredAnnotationTypes包含3个对象:
-
Autowired.class
-
Value.class
-
(Class<? extends Annotation>) ClassUtils.forName(“javax.inject.Inject”, AutowiredAnnotationBeanPostProcessor.class.getClassLoader())
前两个大家应该很熟悉(最后一个俺也不熟先不管他(˶‾᷄ ⁻̫ ‾᷅˵)),随后就开始了一个do{ }while()循环♻️
每次循环中进行了4个步骤:
-
先判断属性
遍历类中的每个属性,通过方法findAutowiredAnnotation()判断属性是否包含指定的注解,如果存在则保存为AutowriedFieldElement
注意⚠️@Autowried注解不支持静态属性
-
再判断方法
遍历类中的每个方法,通过方法findAutowiredAnnotation()判断方法是否包含指定的注解,如果存在则保存为AutowriedMerthodElement
注意⚠️@Autowried注解不支持静态方法
-
接着把他们添加进集合
-
最后获取其父类,直到其父类为空或者为Object.class结束循环
findAutowiredAnnotation()
在这个方法中会循环判断,但凡有一个属性/方法上标记了指定注解,就会立刻返回
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135375.html