首先简单了解下
ApplicationContext
这个类,
ApplicationContext
是
Spring
的容器,负责管理所有的组件,从业务逻辑层组件到持久层组件,都必须运行在
Spring
容器中。因此,必须在
Web
应用启动时,创建
Spring
的
ApplicationContext
实例。为了让
Spring
容器能自动加载,通常有以下一些做法:
一、采用
ContextLoaderListener
来创建
ApplicationContext
。
Spring
提供
ServletContextListener
的一个实现类
ContextLoaderListener
,该类可以作为
listener
使用,它会在创建时自动查找
/WEB-INF/
下的
applicationContext.xml
文件。因此,如果只有一个配置文件,并且文件名为
applicationContext.xml
,则只需要在
web.xml
文件中增加如下代码即可:
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
如果有多个配置文件需要加载,则使用
<context-param>
元素来确定配置文件的文件名。由于
ContextLoaderListener
加载时,会查找名为
contextConfigLocation
的参数。因此,配置
<context-param>
时的参数名字应该为
contextConfigLocation
。如果加载多个配置文件,则在
web.xml
文件增加如下代码即可:
<context-param>
<!—
配置多个文件时需要的参数
-->
<param-name>contextConfigLocation</param-name>
<!—
需要加载的配置文件,可以有多个,用逗号或空格或分号隔开
-->
<param-value>/WEB-INF/applicationContext.xml,/WEB-INF/service.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
二、
采用
load-on-startup Servlet
来创建
ApplicationContext
。
Spring
提供了一个特殊的
Servlet
类:
ContextLoaderServlet
。该
Servlet
在启动时,会自动查找
/WEB-INF/
下的
applicationContext.xml
文件。为了让
ContextLoaderServlet
随应用启动而启动,应将此
Servlet
配置成
load-on-startup
的
Servlet
。
Load-on-startup
的值小一点比较合适,因为要保证
ApplicationContext
优先创建。如果只有一个配置文件,并且文件名为
applicationContext.xml
,则在
web.xml
文件中增加如下代码即可:
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
该
Servlet
用于提供
“
后台
”
服务,作为容器管理应用中的其他
bean
,不需要响应客户请求,因此无须配置
servlet-mapping
。
如果有多个配置文件需要加载,则使用
<context-param>
元素来确定配置文件的文件名。由于
ContextLoaderListener
加载时,会查找名为
contextConfigLocation
的参数。因此,配置
<context-param>
时的参数名字应该为
contextConfigLocation
。如果加载多个配置文件,则在
web.xml
文件增加如下代码即可:
<context-param>
<!—
配置多个文件时需要的参数
-->
<param-name>contextConfigLocation</param-name>
<!—
需要加载的配置文件,可以有多个,用逗号或空格或分号隔开
-->
<param-value>/WEB-INF/applicationContext.xml,/WEB-INF/service.xml</param-value>
</context-param>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
三、
采用
ContextLoaderPlugIn
来创建
ApplicationContext
。
Spring
提供了
ContextLoaderPlugIn
类,用于在启动时加载配置文件。
ContextLoaderPlugIn
默认加载的配置文件为
servletName-servlet.xml
,其中
servletName
是
Struts
的
ActionServlet
对应的
Servlet
名。例如
web.xml
中进行如下定义:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
</servlet>
ContextLoaderPlugIn
默认加载
/WEB-INF/action-servlet.xml,
将该文件作为
Spring
的配置文件。因此,如果
Spring
的配置文件只有一个,并且文件名为
action-sevlet.xml
,则只需在
struts-config.xml
配置文件中增加如下代码:
<plug-in className="org.springframework.
web.struts.ContextLoaderPlugIn"/>
如果有多个配置文件,则使用
<set-property property="" value=""/>
元素来加载多个配置文件,
如果加载多个配置文件,则在
struts-config.xml
文件增加如下代码即可:
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
<!—
需要加载的配置文件,可以有多个,用逗号或空格或分号隔开
-->
value="/WEB-INF/action-servlet.xml,
/WEB-INF/applicationContext.xml" />
</plug-in>