spring自动注入AutowiredAnnotationBeanPostProcessor源码分析
导读:本文共6080.5字符,通常情况下阅读需要20分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 一、MergedBeanDefinitionPostProcessor1.1、postProcessMergedBeanDefinition在Bean属性赋值前,缓存属性字段上的@Autowired和@Value注解信息。publicvoidpostProcessMergedBeanDefinition(RootBeanDefinitionbeanDefinit... ...
目录
(为您整理了一些要点),点击可以直达。在Bean属性赋值前,缓存属性字段上的@Autowired和@Value注解信息。
这个 do-while 循环是用来一步一步往父类上爬的(可以看到这个循环体的最后一行是获取父类,判断条件是判断是否爬到了Object
)
检查是否有重复的元数据,去重处理,如一个属性上既有@Autowired注解,又有@Resource注解 。只使用一种方式进行注入,由于@Resource先进行解析,所以会选择@Resource的方式
在bean实例化前选择@Autowired注解的构造函数,同时注入属性,从而完成自定义构造函数的选择。
遍历构造方法:
只有一个无参构造方法, 则返回null
只有一个有参构造方法, 则返回这个构造方法
有多个构造方法且没有@Autowired, 此时spring则会蒙圈了, 不知道使用哪一个了。这里的后置处理器智能选择构造方法后置处理器。当选择不了的时候, 干脆返回 null
有多个构造方法, 且在其中一个方法上标注了 @Autowired , 则会返回这个标注的构造方法
有多个构造方法, 且在多个方法上标注了@Autowired, 则spring会抛出异常, Spring会认为, 你指定了几个给我, 是不是你弄错了
注意:
这地方有个问题需要注意一下, 如果你写了多个构造方法, 且没有写 无参构造方法, 那么此处返回null,
在回到createBeanInstance 方法中, 如果不能走autowireConstructor(), 而走到instantiateBean() 中去的话, 会报错的,因为类已经没有无参构造函数了。
spring自动注入AutowiredAnnotationBeanPostProcessor源码分析的详细内容,希望对您有所帮助,信息来源于网络。