如果你使用了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--小项目能做快--按激进方式做,一周时间就可以出一个版本,先上线接受市场(用户)的反馈,再改进,再反馈,时间就是生命(成本)。
# spring
# mvc
# webapplicationcontext
# Spring中BeanFactory和ApplicationContext的作用和区别(推荐)
# Spring IoC学习之ApplicationContext中refresh过程详解
# SpringBoot获取ApplicationContext的3种方式
# Spring主配置文件(applicationContext.xml) 导入约束详解
# Spring通过ApplicationContext主动获取bean的方法讲解
# spring中通过ApplicationContext getBean获取注入对象的方法实例
# 详解Spring Boot的GenericApplicationContext使用教程
# Spring获取ApplicationContext对象工具类的实现方法
# JSP Spring ApplicationContext的国际化支持
# 详解spring applicationContext.xml 配置文件
# 详解Spring ApplicationContext加载过程
# 加载
# 可以使用
# 想说
# 能做
# 就可以
# 自己的
# 的是
# 都是
# 是一个
# 这是
# 如果你
# 放在
# 还可以
# 最好的
# 又是
# 多个
# 也没
# 但在
# 但我
# 我们可以
相关文章:
建站之星与建站宝盒如何选择最佳方案?
公司网站制作价格怎么算,公司办个官网需要多少钱?
音乐网站服务器如何优化API响应速度?
,怎么在广州志愿者网站注册?
制作网页的网站有哪些,电脑上怎么做网页?
如何挑选最适合建站的高性能VPS主机?
建站之星logo尺寸如何设置最合适?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
清除minerd进程的简单方法
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
南宁网站建设制作定制,南宁网站建设可以定制吗?
如何在橙子建站中快速调整背景颜色?
如何通过主机屋免费建站教程十分钟搭建网站?
如何安全更换建站之星模板并保留数据?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何通过VPS建站无需域名直接访问?
广德云建站网站建设方案与建站流程优化指南
图册素材网站设计制作软件,图册的导出方式有几种?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
定制建站流程步骤详解:一站式方案设计与开发指南
电商平台网站制作流程,电商网站如何制作?
如何彻底卸载建站之星软件?
如何正确下载安装西数主机建站助手?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
如何通过服务器快速搭建网站?完整步骤解析
香港网站服务器数量如何影响SEO优化效果?
C#如何在一个XML文件中查找并替换文本内容
宿州网站制作公司兴策,安徽省低保查询网站?
建站之星各版本价格是多少?
如何在万网ECS上快速搭建专属网站?
如何设计高效校园网站?
浅谈Javascript中的Label语句
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
建站之星3.0如何解决常见操作问题?
微信小程序 五星评分(包括半颗星评分)实例代码
制作网站的模板软件,网站怎么建设?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
建站主机类型有哪些?如何正确选型
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
如何通过FTP空间快速搭建安全高效网站?
如何通过老薛主机一键快速建站?
家庭建站与云服务器建站,如何选择更优?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
如何配置WinSCP新建站点的密钥验证步骤?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何选择PHP开源工具快速搭建网站?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
如何实现建站之星域名转发设置?
*请认真填写需求信息,我们会在24小时内与您取得联系。