zoukankan      html  css  js  c++  java
  • SpringMVC 上下文webApplicationContext

    使用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(vopoo)和jsp页面。

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

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

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

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

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

  • 相关阅读:
    node.js 安装后怎么打开 node.js 命令框
    thinkPHP5 where多条件查询
    网站title中的图标
    第一次写博客
    Solution to copy paste not working in Remote Desktop
    The operation could not be completed. (Microsoft.Dynamics.BusinessConnectorNet)
    The package failed to load due to error 0xC0011008
    VS2013常用快捷键
    微软Dynamics AX的三层架构
    怎样在TFS(Team Foundation Server)中链接团队项目
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4604075.html
Copyright © 2011-2022 走看看