SpringMVC 上下文webApplicationContext

SpringMVC 上下文webApplicationContext

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

使用listener听众载入配置,一般Struts+Spring+Hibernate是使用listener监听器的。例如以下

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


 
Spring会创建一个WebApplicationContext上下文,称为容器
。保存在 ServletContext中,key是 WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE的值。

 
能够使用Spring提供的工具类取出上下文对象:WebApplicationContextUtils.getWebApplicationContext(ServletContext); 
        DispatcherServlet是一个Servlet,能够同一时候配置多个。每一个 DispatcherServlet有一个自己的上下文对象(WebApplicationContext),称为子上下文(子容器)。子上下文能够訪问 父上下文中的内容。但父上下文不能訪问子上下文中的内容。

它也保存在 ServletContext中,key 是”org.springframework.web.servlet.FrameworkServlet.CONTEXT”+Servlet名称。当一 个Request对象产生时。会把这个子上下文对象(WebApplicationContext)保存在Request对象中。key是 DispatcherServlet.class.getName() + “.CONTEXT”。 
能够使用工具类取出上下文对象:RequestContextUtils.getWebApplicationContext(request); 
  
说明 :Spring 并没有限制我们,必须使用父子上下文。我们能够自己决定怎样使用。

 



方案一,传统型: 
父上下文容器中保存数据源、服务层、DAO层、事务的Bean。 
子上下文容器中保存Mvc相关的Action的Bean. 
事务控制在服务层。

 
因为父上下文容器不能訪问子上下文容器中内容,事务的Bean在父上下文容器中。无法訪问子上下文容器中内容。就无法对子上下文容器中Action进行AOP(事务)。 
当然,做为“传统型”方案,也没有必要这要做。 


方案二,激进型: 
Java世界的“面向接口编程”的思想是正确的。但在增删改查为主业务的系统里,Dao层接口,Dao层实现类,Service层接 口,Service层实现类,Action父类,Action。再加上众多的O(vo\po\bo)和jsp页面。

写一个小功能 7、8个类就写出来了。 开发人员说我就是想接点私活儿,和PHP,ASP抢抢饭碗。但我又是Java程序猿。最好的结果是大项目能做好。小项目能做快。

所以“激进型”方案就出现了 —–没有接口、没有Service层、还能够没有众多的O(vo\po\bo)。那没有Service层事务控制在哪一层?仅仅好上升的Action 层。

 
本文不想说这是不是正确的思想。我想说的是Spring不会限制你这样做。 
因为有了父子上下文,你将无法实现这一目标。解决方式是仅仅使用子上下文容器。不要父上下文容器 。所以数据源、服务层、DAO层、事务的Bean、Action的Bean都放在子上下文容器中。

就能够实现了,事务(注解事务)就正常工作了。这样才够激进。 
总结:不使用listener监听器来载入spring的配置文件。仅仅使用DispatcherServlet来载入spring的配置,不要父子上下文,仅仅使用一个DispatcherServlet,事情变得简单,什么是麻烦的事情是走了。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117741.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux 配置java变量_linux部署java环境

    linux 配置java变量_linux部署java环境很多Java项目发布到环境,需要配置java全局变量这样可以很省心。配置java全局变量非常简单只需要三步。第一步,上传Jdk包并且解压jdk包。并且确定jdk的地址,进入到jdk包中执行pwd会初心jdk的地址第二步:在etc下执行viprofile。这样需要在最下面配置如下内容:exportJAVA_HOME=jdk的主目录路径exportP

    2022年8月21日
    11
  • 软件测试流程设计—黑盒测试用例设计方法「建议收藏」

    软件测试流程设计—黑盒测试用例设计方法「建议收藏」第1章测试用例设计方法测试用例设计方法包括黑盒测试用例设计方法和白盒测试用例设计方法,下面分别进行介绍。1.1黑盒测试用例设计方法黑盒测试用例设计方法包括等价类划分法、边界值分析法、判定表法、因果图法、正交试验法、状态迁移图法、流程分析法、输入域测试法、输出域分析法、异常分析法和错误猜测法等,下面进行详细介绍。1.1.1 等价类划分法1.什么是等价类划分法等价类划分法是一种典型的黑盒测试设计方法。该方法主要针对测试子项进行规格分析,然后获得用例,而不用对系统内部处理进行深..

    2022年6月1日
    26
  • Netty权威指南学习笔记

    Netty权威指南学习笔记最近花了一段时间系统的学习了Netty框架,包括《NettyinAction》以及《Netty权威指南》,对于博主自己来说,我觉得《Netty权威指南》要更适合博主。很厚的《Netty权威指南》权威指南,虽然上面一大部分是例子代码,当然有种跟着Netty官网学小demo的感觉。好记性不如烂笔头,所有代码均手抄Maven实现了一遍,所有例子均可运行,当然自己的学习笔记。Chapter2…

    2022年10月2日
    0
  • windows/mfc程序中使用OpenGL的多重采样功能

    windows/mfc程序中使用OpenGL的多重采样功能windows程序中使用OpenGL的多重采样功能学过opengl基础的人都知道,glEnable(GL_POLYGON_SMOOTH)/glEnable(GL_LINE_SMOOTH)/glEnable(GL_POLYGON_SMOOTH)keyi欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,…

    2022年5月11日
    40
  • python中的补码

    python中的补码

    2020年11月8日
    212
  • 复制集让mongodb的secondary支持读操作,因为存在读写延迟所以是否需要读写分离

    复制集让mongodb的secondary支持读操作,因为存在读写延迟所以是否需要读写分离复制集让mongodb的secondary支持读操作,因为存在读写延迟所以是否需要读写分离

    2022年4月24日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号