每个人都知道@Autowired(@Inject等)注释由AutowiredAnnotationBeanPostProcessor处理。它解析并设置用@Autowired注释的字段和setter但是构造函数呢?这是bean PostProcessor ,这意味着在bean已经创建之后调用它,但是构造函数也可以标记为@Autowired,那么如何创建这样的bean呢?
答案 0 :(得分:1)
好问题。为了澄清,重新说出来:
如果您查看 AutowiredAnnotationBeanPostProcessor ,您会发现有一个名为#determineCandidateConstructors
的方法无法从任何地方调用在那个班级里面。
没有调用它的原因是因为它在 AbstractAutowireCapableBeanFactory 中被引用;一个用于实际创建/实例化bean的类!
我认为Juergen和Spring的家伙认为将#determineCandidateConstructors
放在AutowiredAnnotationBeanPostProcessor
类中具有建筑意义,因为它符合Autowire-ing
真正目的的概念功能注入依赖。
仅供参考,字段@Autowire
与构造函数@Autowire
的这些概念如此紧密地联系在一起,在Spring DI世界中有关于是否使用构造函数与依赖注入的完整讨论。有关详细信息,请参阅标题为基于构造函数或基于setter的DI of this article,Oliver Gierke's comment(即Spring数据项目负责人)和google的部分。 / p>