ApplicationContextAware与Setter Injection

时间:2013-01-20 18:50:48

标签: java spring java-ee

ApplicationContextAware优于Setter Injection的优势。通过Setter Injection,我们也可以从Spring Container获取bean。

4 个答案:

答案 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注入是指依赖注入模式。在开发低耦合应用时,后者更为可取。

这两种模式之间的区别在于herehere

答案 3 :(得分:0)

在大多数情景中,setter注入足够,这提供了一个更好的解决方案,帮助您维护实例之间的关系。因为类不直接依赖于容器,也就是说,它们是Pojos并且不需要知道容器的存在,这将为单元测试和未来的移民带来很多便利。

如果您确实需要从容器中获取某些东西,例如对某些类型的bean进行一些增强,那么就该使用ApplicationContextAware了。通常,不建议通过实现ApplicationContextAware在类中手动获取依赖关系,尤其是对于业务对象。他们不应该对自己的组装负责。