spring ioc容器和spring mvc 容器--------浅谈!!

以前一直不理解,为啥项目中的web.xml要配置2个上下文!前端

即:java

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
  <servlet-mapping>
    <servlet-name>court</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/court-service.xml</param-value> </context-param>
 
 

    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>web

 

 

  servlet:表明的的容器为spring-mvc的子容器,而DispatcherServlet 是前端控制器,该容器专门为前端监听请求的时候所用,就是说当接收到url请求的时候会引用springmvc容器内的对象来处理。spring

  context-param:表明的容器是spring自己的容器,spring-mvc能够理解为一个继承自该容器的子容器,spring容器是最顶层的父类容器,跟java的继承原理同样,子容器能使用父类的对象,可是父容器不能使用子类的对象。spring-mvc

  因此这2个上下文同时出如今web.xml这个配置文件中其实并不冲突,可是要注意2个容器的对象不要重复注入了哈!!!!服务器

  初始化的顺序也是父类容器优先级高,当服务器解析web.xml的时候因为listener监听的缘由,会优先初始化spring容器,以后才初始化spring-mvc容器。mvc

  

介绍完基本概念后就说说以前碰到的问题,因为之前一直用url请求的方式来作交互,因此当时也没有去考虑在web.xml配置spring容器,并且若是项目只存在单纯的url请求交互这样的形式,其实能够单纯的一个spring-mvc这个容器来管理对象便可(有些公司为了井井有条,可能把除去controller控制层之外的对象放在父容器中,即在web.xml配置2个容器)。前段时间项目中忽然加入了webservice,经过ws来发送请求,而不走前端控制器。因此那个时候发如今webService中没法用注解的形式注入对象,只能以传统的 方式建立spring容器而后建立须要的对象,这样依赖若是依赖的服务不少的话,就得不停的建立对象。这样的场景下spring-mvc容器中的对象其实对于全部的ws请求都是不可调用的,而解决的办法就是在web.xml建立spring容器,在项目启动的时候就将要用的服务对象初始化好,而且让ws的服务实现继承SpringBeanAutowiringSupport这个父类。这样ws在调用的时候就能够直接依赖到spring容器中的对象了!!app

若是想深刻了解,能够看源码。。。本人表示看的头大!!!-   -!url

相关文章
相关标签/搜索