我正在使用 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 获取,只需像任何其他库一样添加到应用程序的类路径中即可。