最近在公司項目中碰到了@PostConstruct這個注解,不解其意,查閱了下,總結如下:
1、從Java EE5規范開始,Servlet中增加了兩個影響Servlet生命周期的注解,@PostConstruct和@PreDestroy,這兩個注解被用來修飾一個非靜態的void()方法。寫法有如下兩種方式:
@PostConstruct
public void someMethod(){}
或者
public @PostConstruct void someMethod(){}
被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,並且只會被服務器執行一次。PostConstruct在構造函數之后執行,init()方法之前執行。PreDestroy()方法在destroy()方法知性之后執行

另外,spring中Constructor、@Autowired、@PostConstruct的順序
其實從依賴注入的字面意思就可以知道,要將對象p注入到對象a,那么首先就必須得生成對象a和對象p,才能執行注入。所以,如果一個類A中有個成員變量p被@Autowried注解,那么@Autowired注入是發生在A的構造方法執行完之后的。
如果想在生成對象時完成某些初始化操作,而偏偏這些初始化操作又依賴於依賴注入,那么久無法在構造函數中實現。為此,可以使用@PostConstruct注解一個方法來完成初始化,@PostConstruct注解的方法將會在依賴注入完成后被自動調用。
Constructor >> @Autowired >> @PostConstruct
舉個栗子:
public Class AAA {
@Autowired
private BBB b;
public AAA() {
System.out.println("此時b還未被注入: b = " + b);
}
@PostConstruct
private void init() {
System.out.println("@PostConstruct將在依賴注入完成后被自動調用: b = " + b);
}
}