我有一个关于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)注释提供支持时,我更加困惑。
有人可以启发我吗?
感谢。
答案 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/