Spring事务实现基本原理

本文探讨Spring事务的实现原理,包括使用切面解析@Transaction注解生成Advisor,基于JDK或CGLIB创建动态代理,以及事务的开启、异常处理和提交规则。在调用过程中,Spring会禁用数据库连接的自动提交,确保事务管理的正确性。

文章首发地址

使用

@EnableTransactionManagement

原理

  1. 解析切面——>bean的创建前第一个bean的后置处理器进行解析advisor(pointcut(通过@Transacational解析的切点),advise)(这个advisor是通过@EnableTransactionManagement注册了一个配置类,该配置类就配置了adivsor)

  2. 创建动态代理——>bean的初始化后调用bean的后置处理器进行创建动态代理(有接口使用jdk,没接口使用cglib),创建动态代理之前会先根据advisor中pointCut匹配@Transacational(方法里面是不是有、类上面是不是有、接口或父类上面是不是有),匹配到就创建动态代理。

  3. 调用:动态代理

    try{

    1. 创建一个数据库连接Connection,并且修改数据库连接的autoCommit属性为false,禁止此连接的自动提交,这是实现Spring事务非常重要的一步

    2. 然后执行目标方法方法,方法中会执行数据库操作sql

    }catch{

    1. 如果出现了异常,并且这个异常是需要回滚的就会回滚事务,否则仍然提交事务

    }

  4. 执行完当前方法后,如果没有出现异常就直接提交事务

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Walter Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值