spring 根上下文和 spring dispatcherServlet 上下文的关系

来源:互联网 发布:linux安装service命令 编辑:程序博客网 时间:2024/05/17 04:53

目前的工作中使用了spring mvc,这样在web.xml中就多了一个不同的配置

<servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param>   <param-name>contextConfigLocation</param-name>   <param-value>classpath:spring/dispatcher-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
这里有个contextConfigLocation,同时在web.xml中有个全局的contextConfigLocation

<context-param>   <param-name>contextConfigLocation</param-name>  <param-value>classpath:spring/applicationContext.xml   </param-value></context-param>

以及 
<listener>        <listener-class>org.springframework.web.util.WebAppRootListener</listener-class> </listener>
 对这几个配置,一直存在疑惑,今天经过查阅资料和同事讨论后,对这些配置逐渐理解,同时弄明白了之前service事务配置的疑问。

spring自身存在父子上下文的概念,首先要了解什么是上下文,可以理解为bean的容器。启动时首先是配置的listener即WebAppRootListener初始化父上下文,上述全局的contextConfigLocation为初始化这个根上下文使用。


然后初始化DispatcherServlet,这时使用配置在这个servlet上的contextConfigLocation初始化这个子上下文,这个子上下文将上述的根上下文作为父上下文。这里要说明一下,子上下文可以访问父上下文中的bean,反之,则不行。一般情况下controller相关的bean或者对应的注解扫描配置在这个子上下文中,而service、dao的bean或者对应的注解扫描配置在根上下文中。


这里顺便提一下,对应service的事务配置显然是需要放置根上下文对应到配置文件中。



世界之大,避无可避。

0 0
原创粉丝点击