代码之家  ›  专栏  ›  技术社区  ›  Roman Roman

Spring的AutowiredAnnotationBeanPostProcessor和构造函数注入

  •  5
  • Roman Roman  · 技术社区  · 6 年前

    大家都知道@Autowired(@Inject etc)注释是由AutowiredAnnotationBeanPostProcessor处理的。它解析并设置用@Autowired注释的字段和setter,但构造函数呢?这是bean 后处理器 ,这意味着它是在已经创建bean之后调用的,但构造函数也可以标记为@Autowired,那么如何创建这样的bean呢?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Dovmo    6 年前

    问得好。为澄清起见,请重新措辞:

    • Spring如何提供对 似乎注入了依赖项时的构造函数参数 只有 之后 bean被创建了?!

    如果你看看 AutowiredAnnotationBeanPostProcessor 您会发现有一个方法 #determineCandidateConstructors 没有人打电话 在任何地方 从这个类本身内部。

    之所以没有在那里调用它,是因为它在 AbstractAutowireCapableBeanFactory ; 用于实际创建/实例化bean的类!

    我可以想象,尤尔根和斯普林兄弟认为,把 #确定条件构造函数 AutowiredAnnotationBeanPostProcessor 类,因为它符合 Autowire-ing 注入的依赖项。

    仅供参考,这些领域的概念 @Autowire vs.构造函数 @自动连线 是如此紧密地联系在一起,以至于在Spring DI世界中有一个关于是否使用构造函数和依赖注入的完整讨论。参见标题为 基于构造函数或基于setter的DI of this article , Oliver Gierke's comment (即Spring数据项目负责人),以及 google 了解更多信息。