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