Spring之AOP事务操作

简介: Spring之AOP事务操作 事务操作常用的API PlatformTransactionManager(平台事务管理器) Spring进行事务操作时候,主要使用一个PlatformTransactionManager接口,它表示事务管理器,即真正管理事务的对象。

Spring之AOP事务操作

事务操作常用的API

  • PlatformTransactionManager(平台事务管理器)

Spring进行事务操作时候,主要使用一个PlatformTransactionManager接口,它表示事务管理器,即真正管理事务的对象。 

  • TrancactionDefinition(事务定义信息)

事务定义信息有:

隔离级别

传播行为

PROPAGION_XXX:事务的传播行为

  • 保证在同一个事务中 
    PROPAGION_REQUIRED:支持当前事务,如果不存在,就新建一个(默认
    PROPAGION_SUPPORTS:支持当前事务,如果不存在,就不使用事务 
    PROPAGION_MANDATORY:支持当前事务,如果不存在,就抛出异常

  • 保证没有在同一个事务中 
    PROPAGION_REQUIRES_NEW:如果有事务存在,挂起当前事务,创建一个新的事务 
    PROPAGION_NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务 
    PROPAGION_NEVER:以非事务方式运行,如果有事务存在,抛出异常 
    PROPAGION_NESTED:如果当前事务存在,则嵌套事务执行

超时信息

是否只读

  • TrancactionStatus(事务的状态)

记录事务的状态,平台事务管理器根据事务定义的信息进行事务的管理,事务管理的过程中产生一些状态,将这些状态记录到TrancactionStatus里面。

Spring的声明事务管理方式

Spring进行声明式事务配置的方式有两种:

  • 基于xml配置文件方式

第一步,配置事务管理器


<!-- 1.配置事务的管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 指定要对哪个数据库进行事务操作 -->
<property name="dataSource" ref="dataSource"></property>
</bean>

第二步,配置事务的增强,即指定对哪个事务管理器进行增强 


<!-- 2.配置事务的增强,指定对哪个事务管理器进行增强 -->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<tx:attributes>
<!--
表示来配置你要增强的方法的匹配的一个规则,
注意:只须改方法的命名规则,其他都是固定的!
propagation:事务的传播行为。
-->
<tx:method name="account*" propagation="REQUIRED"></tx:method>
<!-- <tx:method name="insert*" propagation="REQUIRED"></tx:method> -->
</tx:attributes>
</tx:advice>

第三步,配置切入点和切面


<!-- 3.配置切入点和切面(最重要的一步) -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* cn.itcast.tx.BookService.*(..))" id="pointcut1"/>
<!-- 切面,即表示把哪个增强用在哪个切入点上 -->
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
</aop:config>
  • 基于注解方式

第一步,配置事务管理器


<!-- 1.配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>

第二步,开启事务注解


<!-- 2.开启事务的注解 -->
<tx:annotation-driven/>

第三步,在具体使用事务的方法所在的类上面添加注解:@Transactional


@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=true)
public class AccountServiceImpl implements AccountService {
private AccountDao ad ;
private TransactionTemplate tt;
@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=false)
public void addMoney(Double money) {
//....
}
}

 原文地址https://blog.csdn.net/mmake1994/article/details/81807489

相关文章
|
7天前
|
运维 Java 程序员
Spring5深入浅出篇:基于注解实现的AOP
# Spring5 AOP 深入理解:注解实现 本文介绍了基于注解的AOP编程步骤,包括原始对象、额外功能、切点和组装切面。步骤1-3旨在构建切面,与传统AOP相似。示例代码展示了如何使用`@Around`定义切面和执行逻辑。配置中,通过`@Aspect`和`@Around`注解定义切点,并在Spring配置中启用AOP自动代理。 进一步讨论了切点复用,避免重复代码以提高代码维护性。通过`@Pointcut`定义通用切点表达式,然后在多个通知中引用。此外,解释了AOP底层实现的两种动态代理方式:JDK动态代理和Cglib字节码增强,默认使用JDK,可通过配置切换到Cglib
|
23小时前
|
XML Java 数据格式
Spring高手之路18——从XML配置角度理解Spring AOP
本文是全面解析面向切面编程的实践指南。通过深入讲解切面、连接点、通知等关键概念,以及通过XML配置实现Spring AOP的步骤。
21 6
Spring高手之路18——从XML配置角度理解Spring AOP
|
3天前
|
Java 数据库连接 数据库
AOP&事务
AOP&事务
5 0
|
4天前
|
SQL Java 关系型数据库
Spring 事务
Spring 事务
8 1
|
7天前
|
XML Java 数据格式
Spring使用AOP 的其他方式
Spring使用AOP 的其他方式
15 2
|
7天前
|
XML Java 数据格式
Spring 项目如何使用AOP
Spring 项目如何使用AOP
20 2
|
7天前
|
Java 数据库连接 数据库
Spring事务简介,事务角色,事务属性
Spring事务简介,事务角色,事务属性
17 2
|
11天前
|
Java 数据库连接 数据库
16:事务-Java Spring
16:事务-Java Spring
26 5
|
12天前
|
Java 开发者 Spring
Spring AOP的切点是通过使用AspectJ的切点表达式语言来定义的。
【5月更文挑战第1天】Spring AOP的切点是通过使用AspectJ的切点表达式语言来定义的。
24 5
|
12天前
|
XML Java 数据格式
Spring AOP
【5月更文挑战第1天】Spring AOP
27 5