Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

use*_*900 10 java spring postconstruct spring-bean java-11

我正在使用 spring 应用程序,有时用于@PostConstruct代码和测试中的设置

看来注释将被排除在Java 11之外:

请注意,@PostConstruct 和 @PreDestroy 注释都是 Java EE 的一部分。由于 Java EE 已在 Java 9 中弃用并在 Java 11 中删除,我们必须添加额外的依赖项才能使用这些注释

文章建议全部替换@PostConstructafterPropertiesSet方法

我建议您将 @PostConstruct 注释的实现更改为实现 org.springframework.beans.factory.InitializingBean 接口。

我可以在所有情况下盲目更换它吗?还是有其他考虑?

编辑

正如 @JBNizet 所建议的,这可能不是必须或需要的,因为Spring文档建议相反

我们建议您不要使用 InitializingBean接口,因为它不必要地将代码耦合到 Spring。或者,我们建议使用@PostConstruct注释或指定POJO初始化方法。

编辑2

另一种选择是使用initMethod

通过Java配置,可以使用@Bean的initMethod属性

@Bean(initMethod = "init")
public BeanOne beanOne() {
    return new BeanOne();
}
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 5

弹簧使用jakarta.annotation.PostConstruct. 作为 的贡献者spring-cloud-kubernetes,我多次使用过它并将其包含在该项目中。事实上,我们赞成放弃 InitializingBean


And*_*son 0

参考https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-postconstruct-and-predestroy-annotations

\n
\n

与@Resource一样,@PostConstruct和@PreDestroy注释类型是从JDK 6到8的标准Java库的一部分。但是,整个javax.annotation包在JDK 9中与核心Java模块分离,并最终在JDK 11中删除如果需要,现在需要通过 Maven Central 获取 javax.annotation-api 工件,只需像任何其他库一样将其添加到 application\xe2\x80\x99s 类路径中即可。

\n
\n