[英]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
。
在大多数场景中,setter注入已足够,这提供了更好的解决方案,可帮助您维护实例之间的关系。 因为这些类并不直接依赖于容器,也就是说,它们是Pojos,不需要知道容器的存在,这将为单元测试和将来的移植带来很多便利。
如果确实需要从容器中取出某些东西,例如对某些类型的bean进行一些增强,那么该使用ApplicationContextAware了。 通常,不建议通过实现ApplicationContextAware在类中手动获取依赖关系,尤其是对于业务对象。 他们不应对自己的组装负责”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.