Spring3中注入applicationContext的最佳实践
-
11-12-2019 - |
题
就像上面的标题一样,我对通过直接@Autowired annnotation注入applicationContext或在单例spring bean中实现ApplicationContextAware接口之间的利弊感到困惑。
在哪种情况下,你更喜欢哪一个,为什么?谢谢.
解决方案
事实上,两者都很糟糕。它们都将您的应用程序绑定到Spring框架,从而反转整个控制反转概念。在理想的世界中,您的应用程序根本不应该意识到由ApplicationContext管理。
一旦你选择违反这一原则,你怎么做并不重要。 ApplicationContextAware
是已经存在的旧版本吗 至少从2.0版本开始. @Autowired
是一个较新的机制,但它们的工作方式几乎相同。我可能会和你一起去 ApplicationContextAware
, ,因为它在语义上清楚地表明它是关于什么的。
其他提示
如@sean patrick floyd说,ApplicationContext的需要通常是由于设计不好。但有时你没有其他选择。在这些情况下,我更喜欢使用@autowired,因为是我注入所有其他属性的方式。所以,如果我使用@autowired来注入myRepository,为什么我不能为ApplicationContext或任何其他春季bean使用它?
我只使用Spring接口仅适用于我无法使用注释,例如Beannameaware。
如果您需要在单例中获取原型,那么您可以使用方法注入。基本上,您可以创建一个抽象方法,返回所需的对象,弹簧将每次调用该方法时返回原型。您可以在Spring Config中定义“查找方法”。以下是一些链接: http://docs.spring.io / spring / docs / 1.2.9 /参考/ beans.html#beans-factory-methoud-process-projection http://java.dzone.com/articles/method-inexpect-spring
既然你是 不扩展任何spring类您的应用程序始终与框架分开.大多数情况下,你不会想注射 ApplicationContext
因为它,但将需要注入在 ApplicationContext
.
最好的情况是始终坚持最低限度,直到以及除非你有任何特定的要求,这对于spring来说非常简单。
所以要么,
注释你的豆子和
scan
他们在application context
, ,则使用@Autowire
把他们联系起来。使用方法
application context
连接您的bean权宜之计(旧的xml样式配置)。您可以使用@Autowire
用这种方法也。
当你想控制bean生命周期时,你可以阅读API并自定义它,但大多数时候这些常规设置都会完成这项工作。
这里有一些例子。