春季:@Resource注入在JDK9下停止工作
在我的@Configuration
课堂上,我有如下依赖性:
@Configurationpublic class MyConfig {
@Resource(name = "firstDataSource")
private DataSource firstDataSource;
// more code
}
依赖项注入在Oracle JDK 8中工作:firstDataSource
字段已成功注入非空值。
现在,我尝试在JDK 9中运行该应用程序(不做任何修改)。结果是@Resource
不再触发依赖项注入:用此注释注释的所有内容都保留了null
。
@Resource
停止工作的原因可能是什么?
在项目中使用Spring 4.0.9。
这是一个演示该问题的测试项目:https :
//github.com/rpuch/test-spring-injection-jdk9
它包含一个测试:MainTest
我从我的IDE运行。当我使用JDK 8时,它输出
сен 29, 2017 10:45:13 PM org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5f8ed237: startup date [Fri Sep 29 22:45:13 SAMT 2017]; root of context hierarchy
OK
但是在JDK 9下,它会在启动期间引发异常,这是由以下原因引起的:
Caused by: java.lang.IllegalStateException: bean1 is not injected at Bean2.<init>(Bean2.java:7)
at Config2.bean2(Config2.java:16)
当没有注入依赖项时会发生这种情况。
回答:
将java.xml.ws.annotation
在jdk9过时的存在可能是你所面对的原因。由于注释@Resource
来自javax.annotation
同一模块导出的包。
您可能需要提供javatm-common-
annotations作为可升级模块,
并为其导出javax.annotation。
Java™通用注释的独立发行版使用Java平台模块系统“自动”模块名称java.annotation来匹配JDK 9中使用的模块名称。
中央搜索提示,您可以使用:-
<dependency> <groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
使用共享代码在我的机器上运行良好。
另外,有关共享代码的注释。由于要迁移到使用JDK9,因此应迁移到使用2017年9 月28日发布的最新springframework依赖项:-
<dependency> <groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
:请看一下
Roman的答案,--add-
modules以javaee
备不时之需。
以上是 春季:@Resource注入在JDK9下停止工作 的全部内容, 来源链接: utcz.com/qa/399763.html