Spring :監聽器ContextLoaderListener的作用
在開始使用Spring讀取配置檔案ApplicationContext.xml的時候沒有配置監聽器,在web.ml中配置如下:
-
<context-param>
-
<param-name>contextConfigLocation</param-name>
-
<param-value>classpath:applicationContext.xml</param-value>
-
</context-param>
但是在Tomcat啟動的時候日誌中顯示如下:
資訊: No Spring WebApplicationInitializer types detected on classpath
也就是Spring沒有配置檔案,導致後面訪問的時候發生錯誤。
後來查詢之下是發現沒有在web.xml中使用ContextLoaderListener監聽器。設定監聽器
-
<listener>
-
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-
</listener>
啟動tomcat之後日誌如下:
2014-1-9 16:42:24 org.apache.catalina.core.ApplicationContext log
資訊: Initializing Spring root WebApplicationContext
Spring提供ServletContentListener的一個實現類ContextLoaderListener監聽器,該類可以作為Listener使用,在啟動Tomcat
容器的時候,該類的作用就是自動裝載ApplicationContext的配置資訊,如果沒有設定contextConfigLocation的初始引數則會
使用預設引數WEB-INF路徑下的application.xml檔案。如果需要自定義讀取多個配置檔案或者修改預設路徑,則可以在web.xml
中設定:
-
<context-param>
-
<param-name>contextConfigLocation</param-name>
-
<param-value>classpath:applicationContext.xml</param-value>
-
</context-param>
ContextLoaderListener會讀取這些XML檔案併產生 WebApplicationContext物件,然後將這個物件放置在ServletContext的屬性
裡,這樣我們只要可以得到Servlet就可 以得到WebApplicationContext物件,並利用這個物件訪問spring 容器管理的bean。
初始成功之後顯示如下
資訊: Initializing Spring root WebApplicationContext