最近公司要搞一个框架,把这活落在了我的身上,正好那段时间在研究Spring mvc,感觉其注解式Controller比较强大,就准备开发一个Spring mvc框架,但是在测试Spring的事务管理时,发现其不起作用,后来搞了将近一个星期,终于弄好了,不过一部分还是不是很明白,希望有大神帮我解决我的疑问:
1,tx:advice的解析类是哪个?
2,最终开启事物以及关闭事物的操作事物类是不是TransactionInterceptor?
现在把我解决问题的过程写一下。本人小菜,仅希望留下痕迹。
开始我配置Spring事物的配置文件是这样的;
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="create*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="NEVER"/>
<tx:method name="merge*" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="put*" propagation="REQUIRED" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="count*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="load*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="query*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="list*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* com.project..*Service.*(..))" id="txPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
拦截所有的以Service结尾的接口方法,且web.xml中是这样配置的,以下是其中一部分。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/conf/applicationProperties.xml,
WEB-INF/conf/applicationDataSource.xml,
WEB-INF/conf/applicationTransaction.xml,
WEB-INF/conf/applicationSecurity.xml,
WEB-INF/conf/applicationService.xml
</param-value>
</context-param>
.........................
<!-- spring mvc 配置-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--
spring 配置文件,名称的路径都可以配置,如果不配置此项则自动扫描/WEB-INF/
springmvc-servlet.xml,此文件名规则为servlet名-servlet.xml
-->
<init-param>
<param-name>namespace</param-name>
<param-value>conf/springmvc-servlet</param-value>
<!--
加载多个配置文件
-->
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/applicationContext.xml</param-value>
</init-param>
<!--servlet加载方式,启动容器时加载-->
<load-on-startup>1</load-on-startup>
</servlet>
此时发现根本就没办法拦截service中的方法,在service中插入数据错误是,也不能回滚。我在TransactionInterceptor中设置断点,也无法进入。
通过查找资料,个人初步判断如下:
Spring事物管理只会在当前同一个ApplicationContext中拦截事物,如果其上下文不在同一个ApplicationContext中的话,事物不能拦截到。由于我配置在<context-param>事物拦截,而想在<servlet>中拦截事物,导致其ApplicationContext不是同一个,所以拦截不到。
分享到:
相关推荐
- **AOP集成**:Spring MVC与Spring的面向切面编程(AOP)无缝集成,可以方便地实现事务管理和其他切面功能。 2. **Hibernate 3.6.8**: - **ORM框架**:Hibernate是一个强大的ORM工具,它将Java对象映射到数据库...
本项目是关于如何使用Spring MVC与Hibernate结合来实现事务管理的实践教程,通过MyEclipse自动生成所需的包和配置文件。这里将详细讲解这一过程,以及涉及到的关键知识点。 首先,Spring MVC作为Spring框架的一部分...
另外,Spring MVC与Spring框架的其他组件无缝集成,如Spring AOP(面向切面编程)用于实现日志、事务管理等功能,Spring JDBC和MyBatis等持久层框架用于数据库操作,以及Spring Data JPA、Hibernate等ORM工具,使得...
以上这些库构成了 Spring MVC 开发的基础环境,开发者可以利用它们来创建控制器、定义模型、配置视图解析器,以及实现事务管理、数据访问等复杂功能。通过 Spring MVC,开发者能够以声明式的方式组织应用程序,提高...
在Spring MVC中,AOP常用于日志记录、事务管理等横切关注点,它可以将这些功能以声明式的方式与业务代码分离。 `ojdbc14.jar` 是Oracle数据库的驱动包,如果你的应用需要连接Oracle数据库,这个jar是必不可少的。 ...
【标题】"maven与spring MVC"涉及到的是Java Web开发中的两个关键组件——Maven和Spring MVC,它们在构建和管理复杂项目时起着至关重要的作用。Maven是一个项目管理和综合工具,它通过提供一个标准化的构建过程和...
在本项目中,Spring作为容器管理了所有bean的生命周期,包括Spring MVC的控制器、Mybatis的SqlSessionFactory等,同时提供了事务管理功能。 **4. 数据库设计** 博客系统的数据库通常会包含用户表、博客文章表、评论...
《基于Spring、Spring MVC、MyBatis的Java客户关系管理系统详解》 在现代企业运营中,客户关系管理(CRM)系统扮演着至关重要的角色,它帮助企业有效地管理与客户的交互,提高销售效率,优化客户服务,从而增强企业...
在本文中,我们将深入探讨如何使用JavaEE技术栈,特别是Spring、Spring MVC和MyBatis框架,来构建一个超市货物管理系统的实现。这个系统涵盖了基本的登录功能以及与MySQL数据库的交互,包括增删改查操作和分页显示。...
《构建基于Spring + Spring MVC + MyBatis的图书馆管理系统》 图书馆管理系统是信息化时代图书馆管理的重要工具,它能够高效地实现图书的查询、管理、编辑,以及读者的管理和服务。本系统采用Java语言,结合Spring...
Spring框架则在整个系统中起到粘合剂的作用,提供了依赖注入(DI)和面向切面编程(AOP)等核心功能。依赖注入使得对象之间的关系在运行时动态绑定,增强了代码的灵活性和可测试性;而AOP则用于实现如事务管理这样的...
它与Spring框架集成良好,可以使用Spring的事务管理进行控制。 **SSM框架整合** 整合SSM框架,首先需要在项目中引入这三大框架的依赖库。然后,配置Spring的ApplicationContext.xml,定义Bean,包括DataSource、...
Spring MVC提供了MockMvc工具,可以在不启动服务器的情况下进行单元测试和集成测试。 这个“spring MVC_快速入门”文档可能涵盖了以上部分或全部内容,旨在帮助初学者快速理解Spring MVC的工作原理和基本用法。...
在本实例中,iBatis可能是通过XML配置文件或注解方式与Spring MVC集成,实现数据访问层的事务管理和依赖注入。 3. Maven: Maven是Java项目管理工具,用于构建、依赖管理和项目信息管理。`pom.xml`文件是Maven的...
AOP则提供了在不修改源代码的情况下,对程序进行功能增强的能力,如日志、事务管理等。 Spring MVC是基于Spring框架构建的MVC(Model-View-Controller)模式实现,它将应用程序逻辑、数据和用户界面分离,使得开发...
标题中的“Spring MVC”,“Hibernate”和“MySQL”都是Java Web开发中不可或缺的重要技术组件,它们共同构建了一个高效、灵活的后端应用架构。 Spring MVC是Spring框架的一部分,专门用于构建Web应用程序。它是一...
Spring框架则是一个全面的企业级应用开发平台,它不仅包含Spring MVC,还提供了依赖注入(DI)、AOP(面向切面编程)、事务管理、JDBC抽象、缓存、任务调度等多个核心功能。在全注解开发中,我们可以使用@Autowired...
在本项目中,我们利用了Java技术栈中的四个核心组件:Spring MVC、Spring、Hibernate以及Bootstrap,构建了一个全面的图书管理系统。这个系统旨在提供高效、用户友好的图书管理功能,涵盖了从图书入库、检索到借阅、...
- 利用Spring的AOP实现事务管理,确保数据一致性。 - 使用MyBatis的动态SQL功能,使SQL更易于维护和调整。 综上所述,整合Spring MVC和MyBatis涉及了Web应用的多个层面,从配置到业务逻辑,都需要细心设计和实现...