spring自动注入AutowiredAnnotationBeanPostProcessor源码分析(spring,开发技术)

时间:2024-05-08 20:35:32 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    spring%E8%87%AA%E5%8A%A8%E6%B3%A8%E5%85%A5AutowiredAnnotationBeanPostProcessor%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90

在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源码分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:C++ List链表如何使用下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18