0

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

比如说,这个 jarservice.jar包含用限定符注释的类(@Qualifier允许您声明自己的注释,例如@DataAccessObject为了标识您的 bean),并且具有用 .注释的私有成员@Inject

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

不过,有一点我不明白。在此service.jar,一旦编译,无论我是否将其部署在 EE6 上下文中,字节码都会引用诸如javax.inject.@Inject.

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

任何人都可以启发我吗?

谢谢。

4

1 回答 1

0

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

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

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

于 2013-08-17T05:23:43.410 回答