今天在閱讀Servlet3.0.1規範時,在講述Servlet的生命週期的章節發現一個框架設計時須要注意的點,在這裏整理一下。框架
我認爲,框架和庫的不一樣點在於「控制流的走向」。
當咱們使用一個庫,控制流從咱們的代碼流向庫代碼,而後從庫代碼再流回咱們的代碼。當咱們使用一個框架時,控制流同框架開始,流向咱們的代碼,最終又回到了框架的代碼。這意味着當咱們使用一個框架時,咱們完成的組件的生命週期是由框架來管理的。在Servlet的場景下,Servlet是框架,咱們實現的Servlet是組件。因此Servlet的生命週期由框架管控。Servlet的總共由三個生命週期的方法:設計
init(ServletConfig):void; Service(ServletRequest, ServletResponse):void; destroy():void;
Servlet規範中表述時提到,static initialization methods 不一樣於init(ServletConfig):void方法。這裏的緣由很好理解:當類被加載時靜態初始化方法被調用。這是可能運行時環境尚未準備好,因此開發者應該避免在靜態初始化方法中進行一些依賴容器的操做。
這裏啓發了我,做爲框架的使用者,若是框架沒有爲咱們初始化生命週期的鉤子,咱們能夠經過靜態初始化方法來完成這個操做。可是須要注意,這時環境可能不完善。
做爲框架的做者,咱們應該設計好組件的生命週期管理工做,同時在文檔中寫清楚靜態初始化方法這種操做帶來的問題。code