我有一个关于jar的问题,这个jar声明了带注释的beans,并在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 (JSR330)注释的支持时,我更加困惑了。
有人能在这方面给我一些启发吗?
谢谢。
发布于 2013-08-17 13:23:43
您不能混淆DI (JSR330)和CDI (JSR299)。CDI包括DI。所有这些javax.inject注解都属于DI,并被许多框架(例如spring和guice )支持。
如果严格减少jar对JSR330的依赖(部署时不需要切换Java ),那么您将能够使用任何支持框架。
查看此示例:http://www.mkyong.com/spring3/spring-3-and-jsr-330-inject-and-named-example/
https://stackoverflow.com/questions/18269873
复制相似问题