使用了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,事情就简单了,什么麻烦事儿也没有了。
相关推荐
在Spring MVC和Spring框架的整合应用中,常常会遇到两套上下文的问题。Spring MVC是Spring框架的一个模块,主要用于处理Web请求,而Spring则提供了一个更广泛的IoC(Inversion of Control,控制反转)和AOP(Aspect ...
这些组件可以根据预定义的规则(如事务上下文、请求参数等)选择不同的数据源,提高了系统的灵活性和可扩展性。 在压缩包的文件名称列表中,"META-INF"目录通常包含应用的元数据,如MANIFEST.MF文件,它记录了JAR或...
将SpringMVC、Spring和Mybatis集成在一起,首先需要配置Spring的上下文,声明Bean并管理其生命周期。然后,通过Spring的DataSource和TransactionManager配置数据库连接和事务管理。接着,将Mybatis的...
这里可能包含了Spring MVC的DispatcherServlet配置,以及其他如ContextLoaderListener来初始化Spring应用上下文。 `META-INF`目录常常用于存放元数据,例如`MANIFEST.MF`文件,它在JAR和WAR文件中记录了关于该文件...
- `spring-context-4.2.4.RELEASE.jar`:Spring的核心模块,提供依赖注入和上下文支持。 - `spring-core-4.2.4.RELEASE.jar`:Spring的基础模块,包含核心工具类。 - `spring-webmvc-4.2.4.RELEASE.jar`:Spring ...
4. **Spring MVC集成**:与SpringMVC无缝结合,提供统一的配置和上下文管理。 **MyBatis** MyBatis是一个轻量级的持久层框架,它解决了Java开发中的JDBC代码繁琐问题,通过XML或注解方式定义SQL语句,实现了SQL语句...
Spring MVC作为控制器处理HTTP请求,Spring作为应用上下文管理Bean,Mybatis则作为持久层框架,简化数据库操作。这个压缩包提供了一个完整的SSM框架搭建案例,下面我们将深入探讨这些组件以及它们在项目中的应用。 ...
SSM框架的集成涉及到多个配置文件的设置,如Spring的上下文配置、Spring MVC的DispatcherServlet配置、MyBatis的SqlSessionFactory配置以及Mapper接口的扫描等。开发者需要根据实际需求调整这些配置,确保各组件能...
整合这四个技术,开发者首先需要在`pom.xml`文件中添加相应的依赖,然后配置Spring的上下文和MyBatis的配置文件,设置数据源、SqlSessionFactory、Mapper扫描等。接着,为Redis配置连接池和缓存策略,例如设置过期...
这个Demo项目可以帮助我们了解SSM框架如何协同工作,从初始化Spring上下文、配置数据源、创建Mybatis SqlSessionFactory,到使用SpringMVC处理HTTP请求并调用业务逻辑。同时,它也是一个学习和实践SSM整合的好起点,...
3. 集成Hibernate:在Spring上下文中配置Hibernate的SessionFactory,通过DataSource、TransactionManager和HibernateTemplate等组件,使Spring能够管理和控制Hibernate的数据库操作。同时,定义实体类和映射文件,...
5. **Spring上下文配置**:将所有组件(如Service、DAO、Quartz Job等)声明为Spring Bean,并定义它们之间的依赖关系。 6. **测试与调试**:通过单元测试和集成测试确保每个组件的正确工作,同时对整个系统进行...
4. spring-web-3.2.0.M2.jar和spring-webmvc-3.2.0.M2.jar:分别提供了Web上下文支持和Spring MVC框架,后者是Spring处理HTTP请求的主要模块。 SpringMVC是Spring框架的一部分,是一个基于模型-视图-控制器(MVC)...
首先,Spring作为基础框架,负责整个应用的上下文管理,包括Bean的创建和管理。然后,SpringMVC作为Web层,处理用户请求,调用业务逻辑。业务逻辑层通常会包含Spring管理的Service Bean,这些Service Bean可以通过...
1. 配置Spring的上下文文件,定义Bean并实现DI。 2. 配置SpringMVC的配置文件,声明DispatcherServlet、视图解析器、拦截器等。 3. 创建Mybatis的配置文件,指定数据源、事务管理器以及Mapper扫描路径。 4. 编写...
2. 配置Spring:创建Spring的上下文配置文件,定义Bean,包括数据源、事务管理器、SqlSessionFactory等。 3. 配置Spring MVC:定义DispatcherServlet,设置拦截器,以及视图解析器。 4. 配置MyBatis:创建MyBatis的...
2. 配置Spring的上下文文件,声明Bean定义,包括DataSource、SessionFactory、TransactionManager等。 3. 编写Spring MVC的配置文件,设置DispatcherServlet、视图解析器和模型-视图-控制器的映射。 4. 使用注解或...
- **配置Spring MVC**:创建Spring MVC的配置文件,如`web.xml`,配置DispatcherServlet,并指定Spring的上下文配置文件。 - **配置Spring**:设置Spring的核心配置,包括Bean定义,数据源,事务管理器,以及...