1. 程式人生 > >在Web應用中建立Spring容器的兩種方式

在Web應用中建立Spring容器的兩種方式

使用spring的web應用時,不用手動建立spring容器,而是通過配置檔案宣告式地建立spring容器,因此,在web應用中建立spring容器有如下兩種方式:

一.直接在web.xml檔案中配置spring容器

二.利用第三方MVC框架的擴充套件點,建立spring容器

其實第一種方式最為常見。

為了讓spring容器隨web的應用的啟動而自動啟動,有如下兩種方法
    1.利用ServletContextListener實現
    2.採用load-on-startup Servlet實現

對於利用ServletContextListener實現方式,操作及說明如下
    spring提供ServletContextListener的一個實現類ContextLoadListener,該類可以作為Listener使用,會在建立時自動查詢web-inf/applicationContext.xml檔案,因此,如果只有一個配置檔案,並且名為applicationContext.xml,只需要在web.xml檔案中加入如下配置即可

[html] view plain copy  print?
  1. <listener>
  2.   <listener-class>
  3.       org.springframework.web.context.ContextLoaderLister  
  4.   </listener-class>
  5. </listener>
如果有多個配置檔案需要載入,則考慮用<context-param>元素來確定配置檔案的檔名。ContextLoadListenter載入時,會查詢名為contextConfigLocation的引數。因此,配置context-param時,引數名應該是contextConfigLocation

帶多個配置檔案的web.xml檔案如下

[html] view plain copy  print?
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appversion="2.4"
  3.  xmlns="http://java.sun.com/xml/ns/j2ee"
  4.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  
  6.  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7.  <context-param>
  8.   <!-- 引數名為contextConfigLocation -->
  9.   <param-name>contextConfigLocation</param-name>
  10.   <!-- 配置多個檔案之間,以","隔開 -->
  11.   <param-value>/WEB-INF/actionContext.xml,/WEB-INF/appContext.xml,/WEB-INF/daoContext.xml</param-value>
  12.  </context-param>
  13.  <!-- 採用listener建立ApplicationContext例項 -->
  14.  <listener>
  15.   <listener-class>
  16.    org.springframework.web.context.ContextLoaderLister  
  17.   </listener-class>
  18.  </listener>
  19. </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配置檔案的位置