CDI注释类在EE6上下文和Spring DI上下文中都使用

时间:2013-08-16 09:16:16

标签: spring cdi inject

我有一个关于jar声明CDI注释bean的问题,并在spring上下文和EE6上下文中使用。

这个jar,比如service.jar,包含用限定符注释的类(@Qualifier,允许你声明自己的注释,例如@DataAccessObject以识别你的bean),以及私人会员注明了@Inject

它是用maven编译的,它对javax.javaee-api的依赖声明为provided,因为只有在EE6环境中部署时才需要这些类。

虽然,有些事情我不明白。在这个service.jar中,一旦编译完成,无论我是否在EE6上下文中部署它,字节码都会引用javax.inject.@Inject等类。

那么为什么我的spring应用程序 - 在其类路径中没有javax.javaee-api jar - 能够正确加载其配置并运行? 当我得知spring为@Inject(JSR 330)注释提供支持时,我更加困惑。

有人可以启发我吗?

感谢。

1 个答案:

答案 0 :(得分:0)

你不能混淆DI(JSR330)和CDI(JSR299)。 CDI包括DI。所有这些javax.inject注释都属于DI,并且受到许多框架的支持(例如spring和guice)。

如果您严格减少对JSR330的jar依赖关系(无需切换Java EE deps进行部署),您将能够使用任何支持框架。

查看此示例:http://www.mkyong.com/spring3/spring-3-and-jsr-330-inject-and-named-example/