1. 程式人生 > 實用技巧 >@PostConstruct-Java EE5新註解

@PostConstruct-Java EE5新註解

最近在公司專案中碰到了@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);

    }

}



作者:起個名字啦嘛喃
連結:https://www.jianshu.com/p/98cf7d8b9ec3
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。