参考博客:@PostConstruct详解
用法:
@PostConstruct
public void initMsg(){
msg = "======初始化msg======";
System.out.println(msg);
}
作用:
@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如初始化成员变量之类的。
执行顺序:
其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象a和对象p,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowried注解,那么@Autowired注入
是发生在A的构造方法执行完之后
的。
如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在类A构造函数中实现
。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。
Constructor >> @Autowired >> @PostConstruct
验证Constructor在PostConstruct之前
Ex:
@Component
public class A {
private static List<Role> roles;
@Autowired
private RoleMapper roleMapper;
@PostConstruct
private void initRoles(){
roles = roleMapper.findAllRoles();
}
}
说明:roles的初始化需要通过roleMapper完成,又因为@autowired
在类A的构造器生命周期之后,故roles不能在类A的构造器中完成初始化,只能通过@PostConstruct
完成初始化。