`

采用 ContextLoaderListener 创建 ApplicationContext

阅读更多
使用 ContextLoaderListener 创建 ApplicationContext 时,必须使服务器支持 listener,下面这些服务器都是支持Li stener 的,如果使用这些服务器,则可以使用ContextLoaderListener创建 ApplicationContext 实例:

Apache Tomcat4.x+ 。
Jetty 4.x+。
Resin2.1.8+。
Orion 2.0.2+。
BEAWebLogic8.1SP3。

Spring 提供 SeryletContextListener 的一个实现类 ContextLoaderListener,该类可以作为 listener 使用,它会在创建时自动查找 WEB-INF/下的 applicationContext.xrnl 文件。因此,如果只有一个配置文件,并且文件名为applicationContext.xrnl,则只需在 web.xrnl文件中增加如下代码即可:

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

如果有多个配置文件需要载入,则考虑使用<context-para即元素来确定配置文件的文件名。由于ContextLoaderListener加载时,会查找名为contextConfigLocation的参数。因此,配置context-param时参数名字应该是contextConfigLocation。

带多个配置文件的web.xrnl文件如下:

<!--XML 文件的文件头--〉
<?xml version="l.O"encoding="i80-8859-1"?>
<1-- web.xm1文件的DTD等信息--〉<!DOCTYPE web-appPUBLIC
"-//Sun Microsystems.i口c.//DTDWeb Application 2.3//
EN"''http://java.sun.com/dtd/web-app_2_3.dtd''><web-app>
<!--确定多个配置文件>
<context-param><1--参数名为 contextConfigLocation…〉
<param-name>contextConfigLocation</param-name>
<!--多个配置文件之间以,隔开--〉
<param-value>/WEB-iNF/daoContext.xml./WEB-INF/application
Context.xml</param-value></context-param><!--
采用 listener创建ApplicationContext实例-->
<listener>
<listener-class>org.springframework.web.context.ContextLoader
Listener</listener-class></listener></web-app>

如果没有 contextConfigLocation指定配置文件,则 Spring 自动查找 applicationContext.xrnl 配置文件。如果有contextConfigLocation,则利用该参数确定的配置文件。该参数指定的一个字符串,Spring 的 ContextLoaderListener 负责将该字符串分解成多个配置文件,逗号","、空格""及分号";"都可作为字符串的分割符。

如果既没有applicationContext.xrnl 文件,也没有使用contextConfigLocation参数确定配置文件,或者contextConfigLocation确定的配置文件不存在。都将导致Spring无法加载配置文件或无法正常创建 ApplicationContext 实例。

Spring 根据 bean 定义创建 WebApplicationContext 对象,并将其保存在 Web 应用的ServletContext 中。大部分情况下,应用中的bean 无须感受到 ApplicationContext的存在,只要利用 ApplicationContext的 JoC 即可。

如果需要在应用中获取ApplicationContext实例,则可以通过如下方法获取:

WebApplicationContextctx:
WebApplicationContextUtils.getWebApplicationContext(servletContext);

下面是采用 Servlet获取 ApplicationContext 的完整源代码:

public class SpringTestServlet extends HttpServlet
//Servlet的响应方法。
public voidservice(HttpServletRequestrequest,HttpServletResponse response)
throwsServletExceptio口, java.io.IOException
//获取 Servlet的 ServletContext对象
ServletContext sc = getServletContext();
//使用 WebApplicationContextUtils类获得ApplicationContext
WebApplicationContext ctx =WebApplicationContextUtils.
getWebApplicationContext(sc);
//获取 Servlet的页面输出流
PrintWriter out = response.getWriter();
//将 ApplicationContext对象输出
out.println(ctx);

可在程序里手动获取ApplicationContext对象,然后直接输出到Servlet 的响应。将看到 ApplicationContext加载了 web.xml文件中指定的两个配置文件。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics