在Web容器啓動時,web.xml的加載順序通常是這樣的,挑選幾個經常使用屬性來講,順序以下java
context-param -> listener -> filter -> servlet web
listenerspring
在java web規範中說明.按照listner,filter,servlet的順序初始化. 其中listener是按照在web.xml中的申明順序執行的.不存在併發的的狀況併發
固然也有另一種說法:ide
而當咱們想要在Listener初始化一些數據的時候,勢必要把初始化的邏輯代碼寫在listener裏面。在同一個web.xml裏面寫兩個listener,它們的初始化順序是不根據你寫在web.xml裏面的順序而定的,就至關於說你要想在自定義Listener使用spring管理的bean那就會獲得一個null值。那這個時候就要手動的去控制好listener的順序。那若是不要使用spring管理的bean那也就沒有這個必要去控制順序。能夠採用自定義的listener但這個listener不要去實現ServletContextListener,org.springframework.web.context.ContextLoaderListener 的contextInitialized(ServletContextEvent event)方法,在這個Override方法裏面控制好執行順序就能夠了。spa
注:若是實現了ContextLoaderListener類,並在web.xml中配置監聽,則不要再使用spring的監聽器,不然會重複加載。code
經過實現ServletContextListener 接口的listenerxml
/** * 當Servlet 容器啓動Web 應用時調用該方法。在調用完該方法以後,容器再對Filter 初始化, * 而且對那些在Web 應用啓動時就須要被初始化的Servlet 進行初始化。 */ contextInitialized(ServletContextEvent sce) /** * 當Servlet 容器終止Web 應用時調用該方法。在調用該方法以前,容器會先銷燬全部的Servlet 和Filter 過濾器。 */ contextDestroyed(ServletContextEvent sce)
在Web 應用的生命週期中,ServletContext 對象最先被建立,最晚被銷燬。對象