就像上面的标题一样,我对通过直接@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来说非常简单。

所以要么,

  1. 注释你的豆子和 scan 他们在 application context, ,则使用 @Autowire 把他们联系起来。

  2. 使用方法 application context 连接您的bean权宜之计(旧的xml样式配置)。您可以使用 @Autowire 用这种方法也。

当你想控制bean生命周期时,你可以阅读API并自定义它,但大多数时候这些常规设置都会完成这项工作。

这里有一些例子。

  1. 带有@Autowired注释的Spring自动布线Bean
  2. Spring自动布线Bean XML样式
  3. Spring IoC容器API文档
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top