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



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

似乎注解将被排除在 Java 11 之外:

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

文章建议用afterPropertiesSet方法替换所有@PostConstruct

我建议你将实现从@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();
}

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

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

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

相关内容

  • 没有找到相关文章

最新更新