Spring的AutowiredAnnotationBeanPostProcessor和构造函数注入

时间:2018-01-27 21:21:34

标签: java spring dependency-injection autowired

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

1 个答案:

答案 0 :(得分:1)

好问题。为了澄清,重新说出来:

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

如果您查看 AutowiredAnnotationBeanPostProcessor ,您会发现有一个名为#determineCandidateConstructors的方法无法从任何地方调用在那个班级里面。

没有调用它的原因是因为它在 AbstractAutowireCapableBeanFactory 中被引用;一个用于实际创建/实例化bean的类!

我认为Juergen和Spring的家伙认为将#determineCandidateConstructors放在AutowiredAnnotationBeanPostProcessor类中具有建筑意义,因为它符合Autowire-ing真正目的的概念功能注入依赖。

仅供参考,字段@Autowire与构造函数@Autowire的这些概念如此紧密地联系在一起,在Spring DI世界中有关于是否使用构造函数与依赖注入的完整讨论。有关详细信息,请参阅标题为基于构造函数或基于setter的DI of this articleOliver Gierke's comment(即Spring数据项目负责人)和google的部分。 / p>