1. 程式人生 > >Spring :監聽器ContextLoaderListener的作用

Spring :監聽器ContextLoaderListener的作用

在開始使用Spring讀取配置檔案ApplicationContext.xml的時候沒有配置監聽器,在web.ml中配置如下:

 

 
  1. <context-param>

  2. <param-name>contextConfigLocation</param-name>

  3. <param-value>classpath:applicationContext.xml</param-value>

  4. </context-param>


但是在Tomcat啟動的時候日誌中顯示如下:

 

資訊: No Spring WebApplicationInitializer types detected on classpath​​

也就是Spring沒有配置檔案,導致後面訪問的時候發生錯誤。

後來查詢之下是發現沒有在web.xml中使用ContextLoaderListener監聽器。設定監聽器

 

 
  1. <listener>

  2. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  3. </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

中設定:

 

 
  1. <context-param>

  2. <param-name>contextConfigLocation</param-name>

  3. <param-value>classpath:applicationContext.xml</param-value>

  4. </context-param>

 

ContextLoaderListener會讀取這些XML檔案併產生 WebApplicationContext物件,然後將這個物件放置在ServletContext的屬性

裡,這樣我們只要可以得到Servlet就可 以得到WebApplicationContext物件,並利用這個物件訪問spring 容器管理的bean。

初始成功之後顯示如下

資訊: Initializing Spring root WebApplicationContext