1、前言
最近遇到一个情况,@PostConstruct 方法会被执行两次,感觉有点奇怪,跟踪代码简单分析了下,场景有点特殊,这里记录下。
@PostConstruct属于JSR250规范,在bean创建完成并且属性赋值完成之后会执行该初始化方法。
内部通过InitDestroyAnnotationBeanPostProcessor实现逻辑。
2、@PostConstruct 出问题写法说明
一般使用方法比较简单,bean中添加一个注解方法即可。
@Component
public class Demo {
@PostConstruct
public void init(){
System.out.println("bean....@PostConstruct...");
}
}
出问题的写法有点特别,多了@ConfigurationProperties注解,类似:
@Component
@ConfigurationProperties(prefix = "test")
public class Demo {
private String test;
@PostConstruct
public void init(){
System.out.println("bean....@PostConstruct...");
}
}
3、修复方法
修复方法也比较简单,将@ConfigurationProperties逻辑拆到单独的一个类中,将@PostConstruct放在另外一个类中即可。类似:
// 属性类
@Component
@ConfigurationProperties(prefix = "test")
public class TestConfig {
private String test;
}
// 逻辑类
@Component
public class Demo {
@Autowired
TestConfig testConfig;
@PostConstruct
public void init(){
System.out.println("bean....@PostConstruct...");