Rom*_*man 5 java spring dependency-injection autowired
大家都知道@Autowired(@Inject etc)注解是由AutowiredAnnotationBeanPostProcessor处理的。它解析并设置用@Autowired 注释的字段和设置器,但是构造函数呢?这是 bean PostProcessor,这意味着它在 bean 已经创建之后被调用,但是构造函数也可以标记为 @Autowired,那么这样的 bean 是如何创建的呢?
好问题。为了澄清起见,重新表述一下:
如果您查看AutowiredAnnotationBeanPostProcessor,您会发现有一个被调用的方法#determineCandidateConstructors不会从该类本身内部的任何地方调用。
之所以没有在那里调用它,是因为它在 AbstractAutowireCapableBeanFactory 中被引用;用于实际创建/实例 bean 的类!
我想 Juergen 和 Spring 的人决定将 放入类#determineCandidateConstructors中具有架构意义AutowiredAnnotationBeanPostProcessor,因为它符合Autowire-ing注入依赖项的真正目的的概念功能。
仅供参考,字段@Autowire与构造函数的这些概念@Autowire是如此紧密地联系在一起,以至于 Spring DI 世界中就是否使用构造函数与依赖注入进行了全面的讨论。请参阅本文标题为“Constructor-based or setter-based DI” 的部分,Oliver Gierke 的评论(即 Spring Data 项目负责人),以及google了解更多信息。
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |