【发布时间】:2013-01-20 18:50:48
【问题描述】:
ApplicationContextAware 相对于 Setter Injection 有什么优势。通过 Setter Injection 我们也可以从 Spring Container 中获取 bean。
【问题讨论】:
标签: java spring jakarta-ee
ApplicationContextAware 相对于 Setter Injection 有什么优势。通过 Setter Injection 我们也可以从 Spring Container 中获取 bean。
【问题讨论】:
标签: java spring jakarta-ee
使用ApplicationContextAware,您可以获得对当前上下文的引用,以便您可以对其进行编辑,例如添加或删除bean。通常这是一个坏主意,除非在某些测试场景中。
Spring 还强调,使用 ApplicationContextAware 与使用带有 setter 的简单 POJO 相比,您更依赖 Spring 框架。
【讨论】:
ApplicationContextAware。
你不应该使用ApplicationContextAware,除非你真的需要它。如果您可以通过 setter/field/constructor 注入来支持您的所有业务需求,请不要使用ApplicationContextAware。
有些人可能会想使用ApplicationContextAware 来获取原型作用域bean 的新实例(实际上BeanFactoryAware 就足够了)。但是有更好的工具,即lookup-method。
【讨论】:
在大多数情况下,setter 注入就足够了,它提供了更好的解决方案,帮助您维护实例之间的关系。因为类不直接依赖于容器,也就是说它们是Pojos,不需要知道容器的存在,这会给单元测试和以后的迁移带来很多方便。
如果你真的需要从容器中取出一些东西,例如对某些类型的 bean 进行一些增强,那么是时候使用 ApplicationContextAware 了。通常,不建议通过实现 ApplicationContextAware 在类中手动获取依赖关系,尤其是对于业务对象。他们不应该对自己的组装负责”。
【讨论】: