在Web應用中建立Spring容器的兩種方式
一.直接在web.xml檔案中配置spring容器
二.利用第三方MVC框架的擴充套件點,建立spring容器
其實第一種方式最為常見。
為了讓spring容器隨web的應用的啟動而自動啟動,有如下兩種方法
1.利用ServletContextListener實現
2.採用load-on-startup Servlet實現
spring提供ServletContextListener的一個實現類ContextLoadListener,該類可以作為Listener使用,會在建立時自動查詢web-inf/applicationContext.xml檔案,因此,如果只有一個配置檔案,並且名為applicationContext.xml,只需要在web.xml檔案中加入如下配置即可
[html] view plain copy print?
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderLister
- </listener-class>
- </listener>
帶多個配置檔案的web.xml檔案如下
[html] view plain copy print?- <?xmlversion="1.0"encoding="UTF-8"?>
- <web-appversion="2.4"
- xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <context-param>
- <!-- 引數名為contextConfigLocation -->
- <param-name>contextConfigLocation</param-name>
- <!-- 配置多個檔案之間,以","隔開 -->
- <param-value>/WEB-INF/actionContext.xml,/WEB-INF/appContext.xml,/WEB-INF/daoContext.xml</param-value>
- </context-param>
- <!-- 採用listener建立ApplicationContext例項 -->
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderLister
- </listener-class>
- </listener>
- </web-app>
如是沒有通過contextConfigLocation指定配置檔案,spring會自動查詢applicationContext.xml檔案;如果有contextConfigLocation,則利用該引數確定的配置檔案,如果無法找到合適的配置檔案,spring將無法正常初始化
spring根據bean定義建立WebApplicationContext物件,並將其儲存在web應用的ServletContext中。大部分情況下,應用的Bean無須感受到ApplicationContext的存在,只要利用ApplicationContext的IOC容器
如果需要在應用中獲取ApplicationContext例項,可以通過如下程式碼獲取
//獲取當前web應用的spring的容器
WebApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(ServletContext);
二.利用第三方MVC框架的擴充套件點,建立spring容器
Struts有一個擴充套件點PlugIn,spring正是利用了PlugIn這個擴充套件點,從而提供了與Struts的整合。。spring提供了PlugIn的實現類org.springframework.web.struts.ContextLoadPlugIn,這個實現類可作為struts的PlugIn配置,Struts框架啟動時,將自動建立Spring容器
為了利用struts的PlugIn建立Spring容器,只需要在struts配置檔案struts-config.xml中增加如下片段即可
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/actionContext.xml,/WEB-INF/appContext.xml,/WEB-INF/daoContext.xml" />
</plug-in>
其中,指定contextConfigLocation屬性值時,即可以指定一個spring配置檔案的位置,可以指定多個spring配置檔案的位置