• 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容器中的对象了!!

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

  • 相关阅读:
    Node Sass version 5.0.0 is incompatible with^4.0.0
    解决vue-cli引入sass,报错:this.getResolve is not a function问题
    解决nuxt官方脚手架的一些坑:1、支持es6+语法 2、样式支持sass
    针对【create-nuxt-app新版本v3.2.0】构建项目时没有server配置以及运行后弹出收集匿名数据选项等问题的解决方法
    create-nuxt-app创建出来的目录没有server文件夹
    Redis安装(Windows环境下Redis安装)
    koa2中间件,路由,cookies
    用同步的写法来执行异步操作, async, awiat
    koa2 安装与启动
    练习:自己写一个容器ArrayList集合 一一数组综合练习
  • 原文地址:https://www.cnblogs.com/culushitai/p/8629837.html
Copyright © 2020-2023  润新知