@Component
public class BBB {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
@Component
public class AAA {
@Autowired
private BBB bbb;
public AAA() {
// bbb.setName("bbb_name");
System.out.println("此时bbb还未被注入,bbb:" + bbb);
}
@PostConstruct
private void init(){
bbb.setName("bbb_name");
System.out.println("注入依赖完成后自动调用@PostConstruct方法,bbb:" + JSON.toJSONString(bbb));
}
}
项目启动日志如下:
根据启动日志可知,执行先后顺序为 Constructor >> @Autowired >> @PostConstruct。
如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。