繁体   English   中英

ApplicationContextAware与Setter注入

[英]ApplicationContextAware Vs Setter Injection

与Setter注入相比,ApplicationContextAware有什么优势。通过Setter注入,我们还可以从Spring容器中获取bean。

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

Spring还强调指出,使用ApplicationContextAware比使用带有setter的简单POJO更加依赖Spring框架。

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

有些人可能会想使用ApplicationContextAware来获取原型范围内的bean的新实例(实际上BeanFactoryAware就足够了)。 但是,对此有更好的工具,即lookup-method

这是两种不同的模式。 使用ApplicationContextAware将实现服务定位器模式,但是setter注入是指依赖注入模式。 在开发低耦合应用程序时,后者更为可取。

此处此处介绍这两种模式之间的区别

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM