spring 根上下文和 spring dispatcherServlet 上下文的关系
目前的工作中使用了spring mvc,这样在web.xml中就多了一个不同的配置DispatcherServletorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:spring/dispatcher-servlet.xml1DispatcherServ
·
目前的工作中使用了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)