spring中如何做事务?(最原始的做法 只供参考)
之前说的都要实现接口,对Api的依赖性强 属于侵入式的
接下来讲下非侵入式的代码如何实现:
针对环绕事务处理 , 要指明 ProceedingJoinPoint 参数
ProceedingJoinPoint 相当于事件 , 此参数会带着触发该事件的源信息
obj = pjp.proceed() ;在这里等同于调用add*()方法中的代码(参考配置)
配置如下:
<bean id="hibernateUtil" class="com.cs.util.HibernateUtil" ></bean>
<bean id="teamDao" class="com.cs.dao.TeamDaoImpl">
<property name="hibernateUtil" ref="hibernateUtil" />
</bean>
<bean id="personDao" class="com.cs.dao.PersonDaoImpl">
<property name="hibernateUtil" ref="hibernateUtil" />
<property name="teamDao" ref="teamDao" />
</bean>
<bean id="logAdvice" class="com.cs.advice.LogAdvice" />
<bean id="transactionAspect" class="com.cs.advice.TransactionAspect"></bean>
<aop:config>
<aop:pointcut id="addMethod" expression="execution(* add*(..))" />
<aop:pointcut id="afterMethod" expression="execution(* update*(..))" />
<aop:aspect ref="logAdvice">
<aop:before pointcut-ref="addMethod" method="log" />
<aop:after pointcut-ref="afterMethod" method="afterLog" />
</aop:aspect>
<aop:aspect ref="transactionAspect">
<aop:around pointcut-ref="addMethod" method="invoke" />
//针对所有的add*方法都处理了事务(抓哟针对的是级联事务,session是如何传播的),也可以用这种方法做日志,
</aop:aspect>
</aop:config>
transactionAspect的代码如下:
public class TransactionAspect {
private HibernateUtil hibernateUtil ;
private int count = 0 ;
/** count 用于控制在父类对象开启的事务 在父类事务结束时关闭,
**如果不用count控制 , 则父类对象开启的事务会在子类对象的事务处理完毕后关闭
*原因:因为在spring中配置的bean 都是单例,请注意
*/
public HibernateUtil getHibernateUtil() {
return hibernateUtil;
}
public void setHibernateUtil(HibernateUtil hibernateUtil) {
this.hibernateUtil = hibernateUtil;
}
/**针对环绕事务处理 , 要指明 ProceedingJoinPoint 参数
* ProceedingJoinPoint 相当于事件 , 此参数会带着源信息
* obj = pjp.proceed() ;在这里等同于调用add*()方法中的代码(参考配置)
*/
public Object invoke(ProceedingJoinPoint pjp) throws Throwable {
Object obj = null ;
Session session = null ;
Transaction tx = null ;
try {
session = hibernateUtil.getSession() ;
tx = session.getTransaction() ;
count++ ;
if (!tx.isActive()){
System.out.println("事务开启" + pjp.getTarget().getClass().getName()) ;
tx.begin() ;
}
obj = pjp.proceed() ; // *****************关键代码*********************************
count-- ;
if (tx.isActive() && count <= 0){
tx.commit() ;
System.out.println("事务结束" + pjp.getTarget().getClass().getName()) ;
}
} catch (RuntimeException e) {
System.out.println(e.getMessage());
e.printStackTrace() ;
tx.rollback() ;
}finally{
return obj;
}
}
}
分享到:
相关推荐
在IT行业中,Spring框架是Java开发中的一个核心组件,它为构建企业级应用程序提供了全面的解决方案。这篇博客“Spring之Spring2.5集成Hibernate3.6”主要探讨了如何将两个经典的开源框架——Spring 2.5和Hibernate ...
在学习过程中,保存相关的证书、文档和参考资料是很常见的做法,这有助于回顾和巩固所学知识。 总的来说,学习Spring和Maven是提升Java开发能力的重要步骤。理解Spring的DI和AOP,掌握Maven的POM和构建流程,将使你...
在企业级应用开发中,将 Activiti 集成到 Spring 框架中是非常常见的做法,因为 Spring 提供了丰富的功能和良好的企业级服务支持,能够帮助开发者更方便地管理流程实例。 在"activiti-engine-5.6 与 spring集成"这...
标题“最简单的hibernate整合spring(1)”指的是将Hibernate ORM框架与Spring框架进行集成的初级教程。在Java开发中,这两个框架的结合是常见的做法,可以提供方便的数据持久化和依赖注入服务。本教程可能涵盖了如何...
在Java开发领域,MyBatis和Spring框架的整合是常见的做法,这有助于实现持久层的高效管理和事务控制。本文将详细介绍如何进行MyBatis与Spring的整合,搭建一个完整的开发环境。 首先,我们需要理解MyBatis和Spring...
在本项目中,Spring负责管理整个应用的组件,包括数据库连接池、服务层对象、数据访问对象等,同时也提供了事务管理功能。Spring的IoC容器使我们可以轻松地配置和组装这些组件,提高了代码的可测试性和可维护性。 ...
- **文档完善**:有大量的教程和支持文档可供参考。 #### 三、Spring 框架介绍 - **简介**:Spring 是一款开源的应用框架,被广泛应用于企业级Java应用程序开发。Spring 提供了一整套解决方案,包括依赖注入、面向...
对于AspectJ相关的jar包,可以参考Spring提供的示例库中的位置获取。 4. **配置Spring** - 创建Spring配置文件,例如`applicationContext.xml`,并在其中定义bean。 - 配置Spring与Hibernate的整合,包括...
在现代企业级应用开发中,集成JSF(JavaServer Faces)、Spring框架与Hibernate是非常常见的做法。这样的组合能够充分发挥各技术栈的优势:JSF负责前端展示,Spring进行业务逻辑处理,而Hibernate则用于数据持久化...
Struts作为MVC框架处理前端请求和控制流程,Spring则提供了依赖注入和事务管理,而Hibernate则专注于对象关系映射,简化数据库操作。在SSH框架下实现文件的上传和下载,可以避免使用专门的文件上传组件,如...
在Java开发领域,ORM(Object-Relational Mapping)框架如Hibernate和iBatis是常见的数据库操作...这种做法既保留了ORM框架的便捷性,又发挥了手写SQL的优势,使得开发者可以根据具体需求选择最合适的数据访问方式。
2. **配置Spring核心容器**:创建`applicationContext.xml`文件,用于管理Spring Bean的生命周期以及配置事务管理器等。 ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spring...
在IT行业中,集成MyBatis和SpringMVC是常见的做法,因为这两个框架分别在持久层和Web层提供了强大的功能。本实例"mybatis+springmvc自己整合封装的实例"是作者花费时间精心整合的一个半成品,尽管未能实现全部计划的...
以下是从 Spring Data JPA 参考文档中提炼出的重要知识点: 1. **项目元数据**:提供了关于项目的版本、作者等基本信息。 2. **新功能介绍**: - **Spring Data JPA 1.10 版本**:该版本包含了一系列新特性和改进...
- **SSH整合与Spring事务管理**:这部分内容介绍了如何整合Struts、Spring和Hibernate三个框架,并实现了Spring事务管理。这些技术是企业级应用开发中的核心技能之一。 - **Hibernate的一对多关联及Join Fetch**:...
在需要完整事务操作的情况下,将业务逻辑移至Service层是常见做法,但这可能引发回滚问题,因为如果在Action中多次调用Service,一旦出现异常,之前的操作可能无法正确回滚。 B) 当需要返回JSON或XML格式的数据以...
ASE数据库在业界被广泛应用,特别是在金融、电信和制造等需要处理大量事务的行业中。 Sybase ASE数据库服务器包含多个不同的Server组件,每一个都有其特定的用途。BackupServer用于执行数据库的备份操作,确保数据...
这个压缩包中的源码和数据库资源,对于学习和理解如何构建一个完整的电商秒杀系统,以及如何在SpringBoot环境下进行实际开发,是非常有价值的参考资料。通过分析源码,可以深入了解SpringBoot的实战应用、高并发场景...
SSH框架,全称为Struts2、Spring和Hibernate,是Java Web开发中常用的一套集成解决方案。这三种技术分别负责Web层、服务层和持久层,共同构建了一个强大的、灵活的应用程序开发架构。以下是对SSH框架及其官方帮助...
在本项目中,Spring可能用于管理Bean的生命周期,实现业务逻辑,并提供事务管理功能。 4. **Hibernate ORM**:Hibernate是Java中的一款对象关系映射(ORM)工具,它消除了Java代码与数据库之间的直接耦合,使开发者...