c++設計模式概述之模板方法
從Java EE 5規範開始,Servlet中增加了兩個影響Servlet生命週期的註解(Annotion);@PostConstruct和@PreDestroy。這兩個註解被用來修飾一個非靜態的void()方法 。寫法有如下兩種方式:
@PostConstruct
Public void someMethod() {}
或者
public @PostConstruct void someMethod(){}
被@PostConstruct修飾的方法會在伺服器載入Servle的時候執行,並且只會被伺服器執行一次。PostConstruct在建構函式之後執行,init()方法之前執行。PreDestroy()方法在destroy()方法執行執行之後執行。
使用場景:在專案中主要是在Servlet初始化之前載入一些快取資料等
特點:
1、只有一個非靜態方法能使用此註解
2、被註解的方法不得有任何引數
3、被註解的方法返回值必須為void
4、被註解方法不得丟擲已檢查異常
5、此方法只會被執行一次
servlet執行流程:
其實從依賴注入的字面意思就可以知道,要將物件p注入到物件a,那麼首先就必須得生成物件a和物件p,才能執行注入。所以,如果一個類A中有個成員變數p被@Autowried註解,那麼@Autowired注入是發生在A的構造方法執行完之後的。
如果想在生成物件時完成某些初始化操作,而偏偏這些初始化操作又依賴於依賴注入,那麼久無法在建構函式中實現。為此,可以使用@PostConstruct註解一個方法來完成初始化,@PostConstruct註解的方法將會在依賴注入完成後被自動呼叫。
被註解的Servlet生命週期
需要注意的是,註解會多多少少地影響到伺服器的啟動速度。伺服器在啟動時候會遍歷Web 應用的WEB-INF/classes下的所有class檔案與WEB-INF/lib下的所有jar檔案,以檢查哪些類使用了註解。如果應用程式中沒有 使用任何註解,可以在Web.xml中設定的metadata-complete屬性為true.(支援@PostConstruct和 @PreDestroy的伺服器需要支援Servlet2.5規範。Tomcat5.x僅支援Servlet2.4規範。)
注:構造方法 ——> @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); } }