Spring事务实现

小结:

从声明式事务的整个实现中我们看到,声明式事务处理完全可以看成是一个具体的Spring AOP应用。Spring事务处理的实现本身就为应用开发者提供一个非常优秀的AOP应用参考实例。在Spring的声明式事务处理中,采用了IOC容器的Bean配置为事务方法调用提供事务属性设置,从而为应用对事务处理的使用提供方便从Spring实现的角度来看,声明式事务处理的大致实现过程这样:为事务处理配置好AOP的基础设施,比如对应的Proxy代理对象和事务处理Interceptor拦截器对象之后,首先需要完成对这些事务处理属性的读取,这些属性的读取处理是在TransactionInterceptor中实现的;在完成这些事务处理属性的读取之后,Spring为事务处理的具体实现做好准备。可以看到,Spring声明式事务处理过程同时也是对一个整合事务处理实现到Spring AOP和IOC容器中去的过程。

TransactionInterceptor使用AOP实现声明式事务处理的拦截器,封装了Spring对声明式事务处理实现的基本过程;

TransactionAttributeSource和TransactionAttribute这两个类,封装了对声明式事务处理属性的识别,以及信息的读入和配置。

TransactionAtrribute对象,可以事务对事务处理属性的数据抽象。

TransactionInfo和TransactionStatus存放事务处理信息的主要数据对象,她们通过与县城的绑定来实现事务的隔离性。具体来说,TransactionInfo对象本省就像一个栈,对应着每一次事务的调用,保存每一次事务的方法调用的事务处理信息。TransactionInfo对象中持有TransactionStatus对象,TransactionStatus掌管事务执行的详细信息,包括具体的事务对象,事务执行的状态,事务设置状态。在事务的创建、启动、提交和回滚的过程中,这些都需要和TransactionStatus对象中的数据打交道。在准备完数据之后,具体的事务处理是有事务处理器TransactionManager来完成的。事务处理器完成事务处理的过程中,与具体事务处理器无关的操作封装到AbstracPlatformTransactionManager中实现了。这个抽象的事务处理器为不同的具体事务处理器提供通用的事务处理模板。具体的事务处理器比如包含DataSourceTransactionManager和HibernateTransactionManager的实现中可以看到事务的创建,挂起,提交,回滚操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架提供了强大的事务管理支持,使得开发者能够方便地处理数据库操作的一致性和隔离性。以下是Spring事务实现的主要方面: 1. **声明式事务管理**: Spring支持声明式事务管理,即开发者不需要显式开启或关闭事务,而是通过配置AOP(面向切面编程)和`@Transactional`注解自动管理事务。当方法被标记为`@Transactional`时,Spring会自动创建、提交或回滚事务。 2. **@Transactional 注解**: 在Spring中,`@Transactional`是一个非常关键的注解,用于指定哪些方法应该包含事务。它可以设置属性如`propagation`, `isolation`, `rollbackFor`, 和 `readOnly` 来控制事务的行为。 3. **传播行为(Propagation)**: 它决定了当前方法如何与周围的事务关联,比如是否新开事务(NESTED)、是否在存在的事务中运行(JOIN)、或者如果不存在事务则抛出异常等。 4. **隔离级别(Isolation)**: Spring提供四种常见的数据库隔离级别供选择,包括读未提交(READ_UNCOMMITTED)、读已提交(READ_COMMITTED)、可重复读(REPEATABLE_READ)和串行化(SERIALIZABLE),用于控制并发环境下的数据可见性。 5. **救活策略(RollbackOnCommitFailure)**: 如果在提交事务之前发生异常,Spring可以根据配置决定是否回滚事务。 6. **自定义事务管理器(PlatformTransactionManager)**: 用户也可以自定义事务管理器,例如使用JTA(Java Transaction API)进行分布式事务管理。 7. **编程式事务管理**: 对于更精细的控制,可以通过`org.springframework.transaction.TransactionTemplate`接口进行编程式事务管理,但这种方式相对较少用到。 相关问题: 1. Spring声明式事务管理和编程式事务管理有何区别? 2. 如何在Spring中设置默认的事务隔离级别? 3. 如何在Spring中手动开始和结束事务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值