ApplicationContextAware优于Setter Injection的优势。通过Setter Injection,我们也可以从Spring Container获取bean。
答案 0 :(得分:0)
使用ApplicationContextAware
,您可以引用当前上下文,以便对其进行编辑,例如添加或删除bean。通常这是一个坏主意,除了在一些测试场景中。
Spring还强调,对于ApplicationContextAware
,你更依赖于Spring框架,而不是使用带有setter的简单POJO。
答案 1 :(得分:0)
除非您真的需要,否则不应使用ApplicationContextAware
。如果您可以通过setter / field / constructor injection支持所有业务需求,请不要使用ApplicationContextAware
。
有些人可能会想要使用ApplicationContextAware
来获取原型范围bean的新实例(实际上BeanFactoryAware
就足够了)。但是有更好的工具,即lookup-method
。
答案 2 :(得分:0)
这是两种不同的模式。当您使用ApplicationContextAware
时,您实现了Service Locator模式,但setter注入是指依赖注入模式。在开发低耦合应用时,后者更为可取。
答案 3 :(得分:0)
在大多数情景中,setter注入足够,这提供了一个更好的解决方案,帮助您维护实例之间的关系。因为类不直接依赖于容器,也就是说,它们是Pojos并且不需要知道容器的存在,这将为单元测试和未来的移民带来很多便利。
如果您确实需要从容器中获取某些东西,例如对某些类型的bean进行一些增强,那么就该使用ApplicationContextAware了。通常,不建议通过实现ApplicationContextAware在类中手动获取依赖关系,尤其是对于业务对象。他们不应该对自己的组装负责。