我不能在 Java 11 中使用 @PostConstruct 和 @PostDestroy
Posted
技术标签:
【中文标题】我不能在 Java 11 中使用 @PostConstruct 和 @PostDestroy【英文标题】:I can't use @PostConstruct and @PostDestroy with Java 11 【发布时间】:2019-03-13 01:50:49 【问题描述】:在我的项目中使用@PostConstruct
和@PostDestroy
注释时遇到问题。我不能使用这些注解,尽管我导入了 Java 的注解,但看起来这些注解并不存在。我正在使用 Java 11,这是我的 build.gradle
文件的内容:
dependencies
testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.springframework', name: 'spring-webmvc', version: '5.1.0.RELEASE'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.7'
compile group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'
provided group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1'
【问题讨论】:
【参考方案1】:请注意,@PostConstruct
和 @PreDestroy
注释都是 Java EE 的一部分。由于 Java EE 在 Java 9 中已被弃用并在 Java 11 中被删除,我们必须添加一个额外的依赖项才能使用这些注解:
对于 Maven
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
如果使用 Gradle
implementation "javax.annotation:javax.annotation-api:1.3.2"
在这里找到:https://www.baeldung.com/spring-postconstruct-predestroy
【讨论】:
供参考,gradle:implementation "javax.annotation:javax.annotation-api:1.3.2"
【参考方案2】:
你只有 spring-webmvc,你需要 spring 的其余部分才能使用它们的注解。可能是 spring-core 和 spring-annotations。
【讨论】:
谢谢!这是我的问题的原因。 解决方案没有任何意义,因为@PostConstruct 不是弹簧注释。 @unwichtich 我不同意,这完全有道理。确实这些是 javax.annotation,但是 spring 可以提供这些注释,并且可以从这个问题的上下文中推断出 OP 正是想要这种行为。是的,我可以在这里与 OP 进行长时间的讨论,但也许他只是忘记了弹簧是分开的,而不是一个罐子? 啊,好吧,我忽略了 OP 只导入了 API 包并且缺少实现。你是对的!【参考方案3】:另一个对我有用的解决方案是这个。 转至https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.2 并下载jar文件。 然后将 jar 文件复制到您的项目 lib 目录。 最后将项目构建路径指向您粘贴到本地 lib 文件夹中的文件的类路径下。
【讨论】:
以上是关于我不能在 Java 11 中使用 @PostConstruct 和 @PostDestroy的主要内容,如果未能解决你的问题,请参考以下文章
我不能在 Java 11 中使用 @PostConstruct 和 @PostDestroy
为啥我不能在 java 中使用 SimpleDateFormat 得到正确的年份?