zoukankan      html  css  js  c++  java
  • spring ioc容器和spring mvc 容器--------浅谈!!

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

    即:

        <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>

     

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

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

      所以这2个上下文同时出现在web.xml这个配置文件中其实并不冲突,但是要注意2个容器的对象不要重复注入了哈!!!!

      初始化的顺序也是父类容器优先级高,当服务器解析web.xml的时候由于listener监听的原因,会优先初始化spring容器,之后才初始化spring-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容器中的对象了!!

    如果想深入了解,可以看源码。。。本人表示看的头大!!!-   -!

  • 相关阅读:
    二、JVM — 垃圾回收
    一、JVM — Java内存区域
    四、JVM — 类文件结构
    java 如何重写equal 和hashcode方法(最佳实践)
    Java关于继承中的内存分配
    Linux — 基础知识
    Zookeeper — 应用场景
    分布式服务接口请求的顺序性如何保证?
    如何设计一个高并发系统?
    索引策略
  • 原文地址:https://www.cnblogs.com/culushitai/p/8629837.html
Copyright © 2011-2022 走看看