【问题标题】:CDI annotated classes used both in EE6 context and Spring DI context在 EE6 上下文和 Spring DI 上下文中使用的 CDI 注释类
【发布时间】:2013-08-18 15:46:00
【问题描述】:

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

这个 jar,比如 service.jar,包含用限定符注释的类(@Qualifier,允许您声明自己的注释,例如 @DataAccessObject 以识别您的 bean),并具有用 @ 注释的私有成员987654325@.

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

不过,有一些我不明白的地方。在这个service.jar 中,一旦编译,无论我是否将其部署在EE6 上下文中,字节码都会引用javax.inject.@Inject 等类。

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

有人能告诉我吗?

谢谢。

【问题讨论】:

标签: spring cdi inject


【解决方案1】:

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

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

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

【讨论】:

  • 我不知道 JSR299,谢谢。不过,我仍然对我的 spring 应用程序如何加载一些在其字节码中包含 javax.inject 引用的 jar 感到困惑,而在类路径中没有任何东西可以填充此依赖项。
猜你喜欢
  • 1970-01-01
  • 2013-09-21
  • 2013-11-22
  • 1970-01-01
  • 2010-12-17
  • 2013-07-22
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多