春季:@Resource注入在JDK9下停止工作

在我的@Configuration课堂上,我有如下依赖性:

@Configuration

public 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 prepareRefresh

INFO: 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-

modulesjavaee备不时之需。

以上是 春季:@Resource注入在JDK9下停止工作 的全部内容, 来源链接: utcz.com/qa/399763.html

回到顶部