2019独角兽企业重金招聘Python工程师标准>>>

Spring MVC上下文父子容器 博客分类: java spring

在Spring MVC的启动依赖Spring框架,有时候我们在启动Spring MVC环境的时候,如果配置不当的话会造成一些不可预知的结果。下面主要介绍一下Spring MVC环境启动的时候context的状态。

通常情况下使用Spring MVC需要进行如下配置:

1、web.xml中增加监听和dispatcherServlet入口

<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:config/dispatcher-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

如上配置所示:监听器是装载Spring框架本身的bean上下文(如Service和DAO层等);dispatcherServlet是装载Controller的上下文。
2、监听器入口自动扫描配置(applicationContext.xml)

<aop:aspectj-autoproxy proxy-target-class="true" /><context:component-scan base-package="com.moguhu"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /></context:component-scan><import resource="classpath*:beans-*.xml" /><import resource="classpath*:config/beans-*.xml" />

上述的配置指定了Spring框架所扫描的注解不包括@Controller(也可以直接通过包名来指定),当然其他的配置文件(如:事务配置、AOP配置、定时任务等)可以通过<import />引入进来。

3、DispatcherServlet配置(dispatcher-servlet.xml)

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

上面配置是指定了DispatcherServlet所创建的上下文只扫描控制层的beans,当然在dispatcher-servlet.xml中还可以指定视图解析、JSON转换、上传下载等配置信息。

在上面的配置中,listener会创建Spring MVC环境的父类上下文。父类上下文创建完成之后,当初始化DispatcherServlet的时候,就会将之前初始化的context设置为parent。

如果将listener启动的上下文和Dispatcher中启动的上下文所扫描的包都是全部包的话,就会造成在子类context和父类context都有全部的自定义beans,如下图所示

在 容器启动后获取bean的时候,也是先从子类容器中去获取bean,子类获取不到时,再到父类容器中去寻找。当子类容器中装载了Service和DAO 时,控制层就会使用子类容器所装载的bean去执行。但是这里面的service是没有事务等功能的(没有Spring框架的配置),只是普通的 bean,因此使用起来会有不可预知的问题。

http://m.ithao123.cn/content-8711958.html

转载于:https://my.oschina.net/xiaominmin/blog/1599025

Spring MVC上下文父子容器相关推荐

  1. boot spring 没有父子容器_Spring 系列(二):Spring MVC的父子容器

    1.背景 在使用Spring MVC时候大部分同学都会定义两个配置文件,一个是Spring的配置文件spring.xml,另一个是Spring MVC的配置文件spring-mvc.xml. 在这里给 ...

  2. Spring MVC 原理探秘 - 容器的创建过程

    1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...

  3. Spring系列:父子容器详解

    又一次被面试官带到坑里面了. 面试官:springmvc用过么? 我:用过啊,经常用呢 面试官:springmvc中为什么需要用父子容器? 我:嗯...没听明白你说的什么. 面试官:就是control ...

  4. Spring mvc 上下文初始化过程

    为什么80%的码农都做不了架构师?>>>    在软件开发的中,如果某些特性的使用比较普遍,那么这些特性往往可以作为平台特性来实现,通过对这些平台特性进行有效的封装,使其向其他应用开 ...

  5. Spring和springMVC父子容器的原理

    首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境: 其次,在web.xm ...

  6. 面试高频题:Spring和SpringMvc父子容器你能说清楚吗

    引言 以前写了几篇关于SpringBoot的文章<面试高频题:springBoot自动装配的原理你能说出来吗>.<保姆级教程,手把手教你实现一个SpringBoot的starter& ...

  7. Spring和SpringMVC父子容器关系初窥

    一.背景 最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和 ...

  8. 探究Spring和SpringMVC父子容器关系

    兄弟萌,相信有很多人想不到 Spring 和 SpringMVC 是父子容器吧,^ - ^,下面我们来一探究竟. 一般做 SSM 框架项目时,扫描 @Controller 注解类的对象是在 Sprin ...

  9. Spring父子容器详解!!!!

    访问规则:子容器可以访问父容器的对象,父容器不能访问子容器的对象 1.ContextLoaderListener会被优先初始化时,其会根据元素中contextConfigLocation参数指定的配置 ...

最新文章

  1. 2020年春天故事之巧遇史上最奇葩SAP用户
  2. 人工智能、区块链、混合现实:2019年新闻、媒体与技术趋势
  3. ubuntu下安装nagios
  4. 2019年python课本_2019年Python学习指南
  5. 代码中特殊的注释技术——TODO、FIXME和XXX的用处
  6. 极光推送 android 最新,Android——快速集成极光推送-Go语言中文社区
  7. 如何在工作中学习,让自己成为领域专家?
  8. AD RMS高可用(二)为rms群集服务器申请证书
  9. 是否可以在git中预览藏匿内容?
  10. elman神经网络的实现
  11. (译)Cocos2d_for_iPhone_1_Game_Development_Cookbook:1.5播放视频文件
  12. Matlab TreeBagger随机森林回归实例
  13. 在线抢购平台_课程设计报告
  14. 奋斗的小孩系列 FPGA学习altera系列: 第十六篇 分频器设计
  15. alter命令的使用
  16. vs2017无法解析外部符号__imp__fprintf和__imp____iob_func
  17. rust巨型采矿机_【rust巨型挖掘机在哪加柴油】专区-挖掘机-铁甲网
  18. 用python输入 菱形
  19. 计算机的ipv6地址,windows7旗舰版系统下查看电脑iPv6地址的方法【图文详解】
  20. JavaFX调用摄像头拍照

热门文章

  1. 程序员跳槽全攻略pdf
  2. Swift开发图解入门
  3. php获取当前时间戳方法
  4. 封装cookie.js、EventUtil.js、
  5. WPF 用 DataTemplate 合并DataGrid列表列头类似报表设计及行头列头样式 - 学习
  6. 每个网页设计者都自以为是
  7. 写入接口c语言_PYNQ: 使用CFFI嵌入C语言
  8. springboot链接MySQL线程池_SpringBoot中的数据库连接池
  9. aes js 加盐值 解密_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互..._慕课猿问...
  10. 收集Linux常用命令