在web.xml中定义contentConfigLocation参数,Spring会使用这个参数加载所有逗号分隔的.xml文件,Spring默认加载web-INF下的applicationContext.xml文件.
contentConfigLocation classpath*:config/applicationContext.xml,classpath*:config/applicationContext-shiro.xml
contencConfigLocation参数定义了要装入Spring的配置文件,装入的原理说明如下:
Sping中提供ServletContentListener的一个实现类contentLoaderListener,该类可以做一个Listener使用,如果要装入的配置文件只用一个并且名称为applicationContent.xml时,则只需要在文件中加入以下代码即可:
org.springframework.web.context.ContextLoaderListener
如果要装入的配置文件有多个时,则需要使用
有多个配置文件如下配置:
contextConfigLocation classpath*:config/applicationContext.xml,classpath*:config/applicationContext-shiro.xml webAppRootKey EPMAS.webapp.root log4jConfigLocation /WEB-INF/log4j.properties org.springframework.web.util.Log4jConfigListener org.springframework.web.context.ContextLoaderListener
如果没有contentConfigLocation参数指定的配置文件,则Spring会自动的查找applicationContent.xml配置文件;如果配置有contentConfigLocation参数指定的配置文件,该参数指定的是一个字符串,Spring的contentLoaderListener负责将该字符串分解成多个配置文件,逗号,空格,分号多可以作为分隔符;如果没有contentConfigLocation参数指定为配置文件,也没有名称为applicationContent.xml的配置文件,都会导致Spring无法加载配置文件或者创建applicationContent实例异常.
注意:使用contentLoaderListener类来实现配置文件的装入仅适用于适用于Servlet2.4及以上规范Servlet容器。
基于contentLoaderServlet类来实现Spring配置文件的装入可以适用于servlet2.3以下规范的servlet容器:
contextConfigLocation classpath*:config/applicationContext*.xml context org.springframework.web.context.ContextLoaderServlet 1
Spring 提供了一个特殊的Servllet 类: ContextLoaderServlet。该Servlet 在启动时,会自动查找WEB-INF下的applicationContext. xml 文件。当然,为了让ContextLoaderServlet 随应用启动而启动,应将此Servlet 配置成load-on-startup 的Servleto load-on-startup 的值小一点比较合适,因为要保证ApplicationContext 优先创建。
从servlet容器启动时加载组件的顺序来看(ServletContext-> listener ->filter -> servlet),Listener组件是优先于Servlet组件的。基于Servlet方式的加载方案主要是为了兼容Servlet2.3及以下规范的Servlet容器。以Tomcat为例,Tomcat 5.x都已经支持Servlet2.4规范了,因此,基于Listener方式启动Spring容器是目前的主流选择。