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,事情变得简单,什么是麻烦的事情是走了。

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mybatis 创建SqlSessionFactory

    mybatis 创建SqlSessionFactory创建SqlSessionFactory有两种方式:一种是通过XML,另一种是通过Java代码。Stringresource="org/mybatis/example/mybatis-config.xml";InputStreaminputStream=Resources.getResourceAsStream(resource);SqlSessionFactorysqlSess…

  • vdbench数据校验翻译

    vdbench数据校验翻译本文翻译自vdbench的使用手册中的数据校验章节,如有纰漏,还请不吝赐教。vdbench源码下载地址:https://www.oracle.com/downloads/server-storage/vdbench-source-downloads.html数据校验在性能测试的时候不应该被使用,处理器开销可能影响性能测试的结果。在我开始之前,我想问一个想了很多次的问题:“为什么我使用vdbench去检查数据冲突?我也可以写一个大文件,计算校验和,然后重新读这个文件并比较校验和。”当然,你可.

  • java 数字信封_【Java密码学】使用Bouncy Castle生成数字签名、数字信封

    java 数字信封_【Java密码学】使用Bouncy Castle生成数字签名、数字信封importjava.io.FileInputStream;importjava.io.InputStream;importjava.security.KeyStore;importjava.security.PrivateKey;importjava.security.Provider;importjava.security.Security;importjava.security.cert.C…

  • 微信小程序解析富文本标签[通俗易懂]

    微信小程序解析富文本标签[通俗易懂]wxParse方法我踩雷了微信官方文档有个更为便捷的标签<rich-textnodes=”{{}}”></rich-text>

  • 国内外常用公共NTP网络时间同步服务器地址[通俗易懂]

    国内外常用公共NTP网络时间同步服务器地址[通俗易懂]【腾讯云】热门云产品首单特惠秒杀,1核2G云服务器首年38元目录太长不看NTPPoolProjectNTP.ORG.CNNTP授时快速域名服务HSDN(HomeServerDataNetwork)本地服务器数据网络企业阿里巴巴腾讯微软苹果谷歌FacebookCloudflare高通HurricaneElectric飓风电气MSK-IX(MoscowInterneteXchange)莫斯科网络交换INTERNET…

  • MySQL中tinytext、text、mediumtext和longtext等各个类型详解[通俗易懂]

    MySQL中tinytext、text、mediumtext和longtext等各个类型详解[通俗易懂]一、字符串类型类型范围说明Char(N)[binary]N=1~255个字节binary:分辨大小写固定长度std_namecahr(32)notnullVarChar(N)[binary]N=1~255个字节binary:分辨大小写可变长度std_addressvarchar(256)TinyBlob最大长度255个字节(2^8-1)Blob(Binarylarge…

发表回复

您的电子邮箱地址不会被公开。

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