2013-01-20 29 views

回答

0

使用ApplicationContextAware您可以获得当前上下文的引用,以便您可以对其进行编辑,例如添加或删除bean。通常这是一个坏主意,除了在某些测试场景中。

Spring还强调,与ApplicationContextAware相比,使用setter的简单POJO更依赖于Spring框架。

+0

因为我们需要很多实用bean,我们需要哪一种实用bean。您可以选择哪一种实用bean。通过编写大量setter/getters来避免类复杂 – cooper

+0

如果您需要很多实用bean,您应该考虑bean是否具有正确的角色如果它做了太多的事情/负有太多的责任),或者是你的实用bean被分离到良好的逻辑组中。这样你应该能够减少不必要的依赖。我可以想到在任何生产bean中“ApplicationContextAware”的任何理由。 – vertti

0

除非您确实需要,否则不应使用ApplicationContextAware。如果您可以使用setter/field/constructor injection来支持您的所有业务需求,请不要使用ApplicationContextAware

有些人可能会试图使用ApplicationContextAware来获取原型scoped bean的新实例(实际上BeanFactoryAware已经足够)。但有更好的工具,即lookup-method

0

这是两种不同的模式。当您使用ApplicationContextAware时,您实现了Service Locator模式,但setter注入是指一种依赖注入模式。后者在开发低耦合应用时更为可取。

这两种模式之间的差异描述herehere

0

在大多数scenaios,setter注入是完全以足够的,它提供了一个更好的解决方案,帮助您保持实例之间的关系。因为这些类不直接依赖容器,也就是说,它们是Pojos,不需要知道容器的存在,这会为单元测试和将来的移植带来很多便利。

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