1. 程式人生 > 實用技巧 >c++設計模式概述之模板方法

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);
    }
}