什么是Spring和javax.enterprise.inject之间的关系?

时间:2010-06-07 05:37:20

标签: spring dependency-injection cdi jsr299

我正在阅读维基百科关于Java EE应用服务器的文章:

http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition#Java_EE_5_certified

它说Java App Services实现的2个API是:

javax.enterprise.inject
javax.enterprise.context

这些都与应用程序上下文和依赖注入JSR-299有关。我之前从未听说过这些API。 Spring是否实现了这些API?如果他们这样做对任何人都重要吗?

2 个答案:

答案 0 :(得分:3)

  • JSR-330定义了一组注释(javax.inject),这些注释将在不同的依赖注入框架中使用。该规范由Rod Johnson(来自Spring)和Bob Lea(Google Guice)
  • 领导
  • (部分)因为spec spec,spring和guice支持这组注释

这是Spring使用的JavaEE的一部分。

JSR-299使用了同一套,由JBoss的Gavin King领导。但是,JSR-299(也称为CDI)使用javax.enterprise.inejct/context并且是一个全新的依赖注入框架。它基于spring,guice和seam的思想,但正式指定为JSR,旨在覆盖许多极端情况以及与其他JavaEE部件的平滑集成。

JSR-299定义了API和SPI,因此可以开发具体的实现。目前的实施是JBoss WeldApache OpenWebBeansResin CanDI

所以,回答你的问题 - javax.enterprise.inject和春天之间没有直接关系。

答案 1 :(得分:2)

Spring确实支持JSR-330的@Inject - 它可以用来代替@Autowired(除了它没有required属性)。

您还需要在类路径上安装JSR 330 jar。

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-autowired-annotation