最近看到這個註解,感覺網上很多隻是簡單的說了下執行順序,但其實還是有很多關注的點。爲了方便學習,做如下總結。
重點關注
根據jdk源碼註釋解讀,本註解的主要作用是
- 用來執行依賴注入之後的初始化操作
- 註解用來作用於方法
- 每個類最多隻有一個只有的註解方法 只會執行一次
- 本註解必須被所有能依賴注入的類所支持
- 方法必須是無參方法 (除非聲明爲攔截器方法)
- 方法最好不是靜態方法
- 方法可以是final修飾
本方法的執行順序
根據執行順序可以知道,被本註解修飾的方法可以在依賴注入後聲明一些初始化的參數,並且只會被執行一次。
簡單示例
// 首先聲明一個雞類
@Data
public class Chicken {
private String name ;
}
// 將他注入容器
@Configuration
public class UserConfig {
@Bean
public Chicken putUser(){
Chicken chinken = new Chicken();
chinken.setName("吮指雞塊");
return chinken;
}
}
// 在family 類中調用 注入chinken
@Component
public class Family {
@Resource
Chicken chicken;
public static List<String> names;
@PostConstruct
public void init(){
names.add(chicken.getName());
System.out.println("已添加肯德基全家桶豪華套餐");
}
public Family() {
names = new LinkedList<>();
}
}
在上面的示例中,我們需要在初始化時將chiken的name放入names中,但是在構造方法中是無法實現的,因爲構造方法執行時,chiken = null 因此@PostConstruct就派上了用場