zoukankan      html  css  js  c++  java
  • Spring和springmvc父子容器注解扫描问题详解

     

    一、Spring容器和springmvc容器的关系如下图所示:

    Springspringmvc和作为两个独立的容器,会把扫描到的注解对象分别放到两个不同的容器中,

    Springmvc容器是spring容器的一部分,他们访问对象的范围如下所示:

    ①:springmvc子容器可以访问spring父容器中的对象

    ②:spring父容器不能访问springmvc子容器中的对象

     

    ***在实际应用中的实例***

    一般情况下,一个spring / springmvc / mybatis 组合的框架中,会存在以下几个配置文件:

     

    1. applicationContext-service.xml 文件

          <!-- 配置service层的组件扫描器 -->

          <context:component-scan base-package="com.prozhu.service"></context:component-scan>

      说明:在这个里面存在着一个spring的注解扫描器。用来扫描@Service的注解

       

    2. Springmvc.xml 文件

      <!-- 配置Controller扫描器 -->

      <context:component-scan base-package="com.prozhu.controller" />

      说明:这个里面存在着springmvc的注解扫描器,专门用来扫描@Controller的注解

       

      然后呢?有点同学可能会想,我能不能合并成一个注解扫描器,来完成对象注入的问题?将配置文件中的注解扫描器更改为如下配置:

       

      applicationContext-service.xml文件中进行全局扫描的配置:

      而在springmvc中不配置注解扫描器

      <!-- 配置spring的注解扫描器 -->

      <context:component-scan base-package="com.prozhu" />

       

      说明:用这个扫描器分别扫描service层和controller层的注解:@Service /@Controller / @Autowired

      当一旦采用这种方式之后,spring会将扫描的对象都会存放到spring的容器,而不会放到springmvc子容器中,当访问项目的时候,

      springmvc找不到处理器映射器,和其对应的Controller,进而报404错误!

       

    3. 不用spring容器,只用springmvc容器行不行呢?

      答案:是可以的,在这个里面可以同时扫描Controller层、service层、dao层的注解。

       

    4. 在springmvc spring 都有注解扫描的前提下,能不能将事务配置在Controller层?

      答案:是不能的,因为事务管理器是配置在spring容器中的,如果将事务配置在Controller层的话,spring容器就访问不了springmvc子容器,

      进而无法访问到事务对象。进而导致事务失效。

  • 相关阅读:
    GPS文件处理
    ArcEngine整个Map选择集的闪烁以及跨图层选择集导出为Shp
    查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名
    GPS文件处理(后续)——计算单词数
    辩者二十一事
    ArcEngine添加栅格后,不能闪烁问题
    struts2 模型驱动的action赋值优先顺序
    easyui placeholder 解决方案
    velocity的foreach下标
    javascript动态改变iframe的src
  • 原文地址:https://www.cnblogs.com/Prozhu/p/6709320.html
Copyright © 2011-2022 走看看