Spring事务核心接口:PlatformTransactionManager

2024-03-26 03:12

本文主要是介绍Spring事务核心接口:PlatformTransactionManager,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

全解:PlatformTransactionManager

PlatformTransactionManager是Spring框架中事务管理的核心接口,它负责管理事务的创建、提交和回滚等操作。在Spring中,事务管理是通过PlatformTransactionManager和TransactionManager接口来实现的。PlatformTransactionManager是一个更高级的接口,它封装了TransactionManager接口,提供了更丰富的事务管理功能。

1. PlatformTransactionManager接口

PlatformTransactionManager接口定义了事务管理的基本操作,包括开启事务、提交事务和回滚事务等。PlatformTransactionManager接口的主要方法如下:

public interface PlatformTransactionManager extends TransactionManager {TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException;void commit(TransactionStatus status) throws TransactionException;void rollback(TransactionStatus status) throws TransactionException;
}
  • getTransaction方法:用于获取一个新的事务或者加入一个现有的事务。该方法接受一个TransactionDefinition对象,用于指定事务的属性,如隔离级别、传播行为等。
  • commit方法:用于提交一个事务。该方法接受一个TransactionStatus对象,用于表示需要提交的事务。
  • rollback方法:用于回滚一个事务。该方法接受一个TransactionStatus对象,用于表示需要回滚的事务。

2. PlatformTransactionManager的实现类

Spring框架提供了多种PlatformTransactionManager的实现类,用于支持不同的事务管理机制,如JDBC、JPA、Hibernate等。常用的PlatformTransactionManager实现类包括:

  • DataSourceTransactionManager:用于管理基于JDBC的事务。
  • JpaTransactionManager:用于管理基于JPA的事务。
  • HibernateTransactionManager:用于管理基于Hibernate的事务。
  • JtaTransactionManager:用于管理基于JTA的分布式事务。

这些实现类都实现了PlatformTransactionManager接口,并提供了具体的事务管理功能。开发者可以根据具体的应用场景,选择合适的PlatformTransactionManager实现类。

3. PlatformTransactionManager的使用

PlatformTransactionManager的使用通常包括以下几个步骤:

  1. 创建PlatformTransactionManager实例:根据具体的应用场景,选择合适的PlatformTransactionManager实现类,并创建其实例。
  2. 开启事务:调用PlatformTransactionManager的getTransaction方法,获取一个新的事务或者加入一个现有的事务。
  3. 执行事务性代码:在事务中执行业务逻辑代码。
  4. 提交事务:调用PlatformTransactionManager的commit方法,提交事务。
  5. 回滚事务:如果执行业务逻辑代码时发生异常,调用PlatformTransactionManager的rollback方法,回滚事务。

以下是一个使用PlatformTransactionManager管理JDBC事务的示例:

// 创建DataSourceTransactionManager实例
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);// 开启事务
TransactionStatus transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());try {// 执行事务性代码jdbcTemplate.update("insert into user(name, age) values(?, ?)", "John", 20);jdbcTemplate.update("insert into user(name, age) values(?, ?)", "Jane", 22);// 提交事务transactionManager.commit(transactionStatus);
} catch (Exception e) {// 回滚事务transactionManager.rollback(transactionStatus);
}

在这个示例中,我们首先创建了一个DataSourceTransactionManager实例,用于管理JDBC事务。然后,我们调用getTransaction方法,开启一个新的事务。接着,我们在事务中执行了两条插入语句。如果执行成功,我们调用commit方法,提交事务。如果执行失败,我们调用rollback方法,回滚事务。

4. PlatformTransactionManager的扩展

PlatformTransactionManager接口提供了丰富的扩展点,用于支持更复杂的事务管理需求。例如,Spring框架提供了TransactionTemplate类,用于简化事务管理的代码编写。TransactionTemplate类封装了PlatformTransactionManager接口,提供了更高级的事务管理功能,如异常转换、回滚规则等。

另外,Spring框架还提供了事务拦截器(TransactionInterceptor)和事务属性(TransactionAttribute)等机制,用于支持声明式事务管理。通过配置事务拦截器和事务属性,开发者可以在不修改代码的情况下,实现事务管理的自动化。

5. 结论

PlatformTransactionManager是Spring框架中事务管理的核心接口,它负责管理事务的创建、提交和回滚等操作。Spring框架提供了多种PlatformTransactionManager的实现类,用于支持不同的事务管理机制。PlatformTransactionManager的使用通常包括创建实例、开启事务、执行事务性代码、提交事务和回滚事务等步骤。PlatformTransactionManager接口提供了丰富的扩展点,用于支持更复杂的事务管理需求。开发者需要根据具体的应用场景,选择合适的PlatformTransactionManager实现类,并掌握其使用方法,以实现事务管理的自动化和高效化。

PlatformTransactionManager结合AOP实现事务代理

PlatformTransactionManager结合AOP(Aspect-Oriented Programming,面向切面编程)可以实现事务代理,从而实现声明式事务管理。声明式事务管理是指通过配置文件或注解的方式,在不修改业务代码的情况下,为业务方法添加事务支持。

在Spring中,可以通过AOP拦截器(Interceptor)和通知(Advice)来实现事务代理。其中,AOP拦截器用于拦截业务方法的调用,而通知用于在业务方法执行前后添加事务支持。

以下是使用PlatformTransactionManager结合AOP实现事务代理的步骤:

  1. 创建PlatformTransactionManager实例:根据具体的应用场景,选择合适的PlatformTransactionManager实现类,并创建其实例。
  2. 创建AOP拦截器:创建一个实现了MethodInterceptor接口的类,用于拦截业务方法的调用。在intercept方法中,调用PlatformTransactionManager的getTransaction方法,开启一个新的事务。然后,调用业务方法,执行业务逻辑代码。如果执行成功,调用PlatformTransactionManager的commit方法,提交事务。如果执行失败,调用PlatformTransactionManager的rollback方法,回滚事务。
  3. 创建通知:创建一个实现了MethodBeforeAdvice接口和AfterReturningAdvice接口的类,用于在业务方法执行前后添加事务支持。在before方法中,调用PlatformTransactionManager的getTransaction方法,开启一个新的事务。在afterReturning方法中,调用PlatformTransactionManager的commit方法,提交事务。
  4. 配置AOP拦截器和通知:在Spring配置文件中,配置AOP拦截器和通知,将其应用到需要添加事务支持的业务方法上。

以下是一个使用PlatformTransactionManager结合AOP实现事务代理的示例:

<!-- 创建PlatformTransactionManager实例 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
</bean><!-- 创建AOP拦截器 -->
<bean id="transactionInterceptor" class="com.example.TransactionInterceptor"><property name="transactionManager" ref="transactionManager"/>
</bean><!-- 创建通知 -->
<bean id="transactionAdvice" class="com.example.TransactionAdvice"><property name="transactionManager" ref="transactionManager"/>
</bean><!-- 配置AOP拦截器和通知 -->
<aop:config><aop:pointcut id="transactionPointcut" expression="execution(* com.example.service.*.*(..))"/><aop:advisor advice-ref="transactionInterceptor" pointcut-ref="transactionPointcut"/><aop:advisor advice-ref="transactionAdvice" pointcut-ref="transactionPointcut"/>
</aop:config>

在这个示例中,我们首先创建了一个DataSourceTransactionManager实例,用于管理JDBC事务。然后,我们创建了一个TransactionInterceptor类,用于拦截业务方法的调用,并在intercept方法中添加事务支持。接着,我们创建了一个TransactionAdvice类,用于在业务方法执行前后添加事务支持。最后,我们在Spring配置文件中,配置了AOP拦截器和通知,将其应用到需要添加事务支持的业务方法上。

需要注意的是,在使用PlatformTransactionManager结合AOP实现事务代理时,需要确保业务方法的事务属性与PlatformTransactionManager的事务属性匹配。例如,如果业务方法需要使用PROPAGATION_REQUIRED传播行为,那么PlatformTransactionManager也需要使用相同的传播行为。

总之,PlatformTransactionManager结合AOP可以实现事务代理,从而实现声明式事务管理。开发者可以根据具体的应用场景,选择合适的PlatformTransactionManager实现类和AOP拦截器和通知,并进行配置,以实现事务管理的自动化和高效化。

这篇关于Spring事务核心接口:PlatformTransactionManager的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847114

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听