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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • viper4android脉冲样本,V4A脉冲反馈样本第一弹 爽爆「建议收藏」

    煤油,积分3926,距离下一级还需1074积分NFS_359|煤油煤油,积分3926,距离下一级还需1074积分|6电梯直达发表于2015-1-218:14:34|只看楼主|只看大图|倒序浏览|阅读模式|收藏本帖NFS_359|煤油煤油,积分3926,距离下一级还需1074积分主题:19|帖子:1016|积分:3926该用户从未签到当前离线本帖最后由…

    2022年4月17日
  • 102 二叉树层序遍历

    102 二叉树层序遍历层序遍历,每次层的输出是是一个一维数组,整个二叉树的输出结果是二维数组BFS遍历,依托于队列结构,每次在根节点出栈的时候,将其值加在结果列表中,然后将他的左右孩子节点入队列。层序遍历相对于BFS,需要知道每一层有多少个节点。因此,我们需要稍微修改一下代码,在每一层遍历开始前,先记录队列中的结点数量nn(也就是这一层的结点数量),然后一口气处理完这一层的n个结点。classSolution:deflevelOrder(self,root:TreeNode):.

    2022年5月21日
  • CSS控制文本超出指定宽度显示省略号和文本不换行

    一般的文字截断(适用于内联与块):.text-overflow{display:block;/*内联对象需加*/width:31em;/*何问起hovertree.com*/word

    2021年12月23日
  • Linux下chkconfig命令详解

    Linux下chkconfig命令详解

    2021年10月28日
  • NVIC库函数

    NVIC库函数1.voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)功能:根据NVIC_InitStruct结构体变量中的参数初始化NVIC外设注释:结构体中的NVIC_IRQChannel成员赋值要到stm32f10x.h中的IRQn_Type(STM32F10x中断数定义)去复制例如:NVIC_Init(&amp;NVIC_InitStructur…

    2022年5月28日
  • ‘java‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件「建议收藏」

    ‘java‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件「建议收藏」’java’不是内部或外部命令,也不是可运行的程序或批处理文件。今天在运行逆向的jar,其中在cmd中用到了java命令。配置JAVA环境变量如下:1.下载安装jdk2.安装完成后,右击“我的电脑”,点击“属性”;3.选择“高级”选项卡,windows7选择左边的“高级系统设置”,点击“环境变量”;4.用户变量配置JAVA_HOME指明JAVA安装路径,值设为:C…

    2022年7月17日

发表回复

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

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