<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
<!--Spring的ApplicationContext 载入 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置SpringMVC -->
<servlet>
<servlet-name>springmvc-web</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定SpringMVC配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc-web</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
1) 在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用,在这个方法中,spring会初始化一个启动上下文,这个上下文被称为根上下文(或者称之为父容器,根容器,spring容器)即WebApplicationContext,这是一个接口类,确切的说,其实际的实现类是XmlWebApplicationContext。这个就是spring的IoC容器,其对应的Bean定义的配置由web.xml中的context-param标签指定。spring容器中就包含有<context-param>指定的applicationContext.xml配置文件中定义的bean。
父上下文使用与否
方案一,传统型:
父上下文容器中保存数据源datasource、服务层service、DAO层、事务的Bean(transaction)。
子上下文容器中保存Mvc相关的Action、controller的Bean.
事务控制在服务层。
由于父上下文容器不能访问子上下文容器中内容,事务的Bean在父上下文容器中,无法访问子上下文容器中内容,就无法对子上下文容器中Action进行AOP(事务)。
方案二,激进型:
不使用listener监听器来加载spring的配置文件,只使用DispatcherServlet来加载spring的配置,不要父子上下文,只使用一个DispatcherServlet,所以数据源、服务层、DAO层、事务的Bean、Action的Bean都放在子上下文容器中。事情就简单了,什么麻烦事儿也没有了。
-----------------------------------------------------------------------------------------------
|
1
|
<context:component-scan base-package=“com.test" /> |
<bean id="common.propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true" /><!--忽略未找到文件 -->
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="fileEncoding" value="UTF-8" />
<property name="locations">
<list>
<value>classpath*:conf/default-*.properties</value>
<value>classpath*:conf/*.properties</value>
</list>
</property>
</bean>
- @value("{a}")
- private String a;

本文探讨了Spring MVC在web容器启动时的工作原理,包括如何通过不同的配置文件创建根上下文和子上下文,以及它们之间的关系。同时分析了两种配置方案的特点,并通过两个案例详细解释了配置不当可能引发的问题及解决方案。
2043

被折叠的 条评论
为什么被折叠?



