Spring MVC之WebApplicationContext_动力节点Java学院整理

 更新时间:2017年08月31日 10:24:29   投稿:mrr  
这篇文章主要介绍了Spring MVC之WebApplicationContext的相关资料,需要的朋友可以参考下

如果你使用了listener监听器来加载配置,一般在Struts+Spring+Hibernate的项目中都是使用listener监听器的。如下
Java代码  

<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,事情就简单了,什么麻烦事儿也没有了。

Java--大项目能做好--按传统方式做,规规矩矩的做,好扩展,好维护。

Java--小项目能做快--按激进方式做,一周时间就可以出一个版本,先上线接受市场(用户)的反馈,再改进,再反馈,时间就是生命(成本)。

相关文章

  • SSH框架网上商城项目第14战之商城首页UI的设计

    SSH框架网上商城项目第14战之商城首页UI的设计

    这篇文章主要为大家详细介绍了SSH框架网上商城项目第14战之商城首页UI的设计,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • java-SSH2实现数据库和界面的分页

    java-SSH2实现数据库和界面的分页

    本文主要是介绍SSH2实现数据库和界面的分页的代码,分页在web应用中是经常要做的事情,实用性比较大,有需要的朋友可以来了解一下。
    2016-10-10
  • 使用Java实现解析Excel公式

    使用Java实现解析Excel公式

    在日常工作中,我们经常需要在Excel中使用公式对表中数据进行计算和分析,所以本文小编主要来和大家介绍一下如何在Java中实现解析Excel公式,感兴趣的可以了解下
    2024-02-02
  • springboot的SpringPropertyAction事务属性源码解读

    springboot的SpringPropertyAction事务属性源码解读

    这篇文章主要介绍了springboot的SpringPropertyAction事务属性源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Spring Boot 集成 Mybatis Plus 自动填充字段的实例详解

    Spring Boot 集成 Mybatis Plus 自动填充字段的实例详解

    这篇文章主要介绍了Spring Boot 集成 Mybatis Plus 自动填充字段,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 史上最全Java8日期时间工具类(分享)

    史上最全Java8日期时间工具类(分享)

    这篇文章主要介绍了史上最全Java8日期时间工具类(分享),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Spring零基础到进阶之鸿蒙开篇

    Spring零基础到进阶之鸿蒙开篇

    Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能
    2022-07-07
  • springboot高并发下提高吞吐量的实现

    springboot高并发下提高吞吐量的实现

    这篇文章主要介绍了springboot高并发下提高吞吐量的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • SpringBoot整合Quartz实现定时任务详解

    SpringBoot整合Quartz实现定时任务详解

    这篇文章主要介绍了Java 任务调度框架 Quartz,Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。,下面我们来学习一下关于 Quartz更多的详细内容,需要的朋友可以参考一下
    2022-08-08
  • Spring中的循环依赖问题

    Spring中的循环依赖问题

    在Spring框架中,循环依赖是指两个或多个Bean相互依赖,这导致在Bean的创建过程中出现依赖死锁,为了解决这一问题,Spring引入了三级缓存机制,包括singletonObjects、earlySingletonObjects和singletonFactories
    2024-09-09

最新评论