Spring及Spring boot Spring声明式事务管理 总结文

SPring事务实现

Spring声明式事务因为综合了四个方面知识点,所以会显的复杂,其实梳理一下,就会容易理解。

  • 数据访问事务功能实现
  • 注解@Transactional解析
  • AOP
  • 自动配置

这是普遍技术优化所呈现的特点:通过封装非业务代码来达到方便的同时结合了更多的技术,导致与最基本的业务实现逻辑越来越远,源码阅读越来越困难,要掌握的知识也更多。

在一定限度内是正确的,毕竟业务是频繁无限的,而源码总是有限的,如果这样优化带来的收益值得我们去增加源码的复杂度,那就应该去优化。

如果想要分析清楚Spring声明式事务,就先应该把自动配置源码的分析先放下,回到业务的流程中。Spring声明式事务的过程其实就是:

  • 拿到@Transactional注解以及注解所在的类信息,创建一个代理对象包装这些信息。
  • 在执行代理对象映射的目标对象方法时跳转到事务处理,进行我们常用的事务处理

整个Spring声明式事务的实现是按照AOP的流程进行,在其中穿插了对@Transactional注解的解析和事务的代码实现。

建议在学习Spring声明式事务过程之前学会AOP。
Spring及Spring boot 第二章 AOP 总结文

而整个AOP的过程也可以直接分为三步:

1. 拿到Advisor
2. 创建代理对象
3. 在相关事件节点拦截,执行切点方法

再穿插对@Transactional注解的解析和事务的代码实现,整个过程就是这样,从宏观角度来讲就这么回事,只要把这五个过程分析清楚就对Spring声明式事务掌握的差不多了

在这里插入图片描述

Spring声明式事务源码实现

Spring声明式事务流程小结

Spring及Spring boot 第四章-第二节 Spring声明式事务管理 @Transaction AOP实现

Spring 声明式事务 事务功能实现

事务功能实现所需组件

事务功能实现

事务功能实现组件是如何参与到Spring声明式事务中的

事务功能实现组件是如何参与到Spring声明式事务中的

Spring事务——数据库

Spring事务——数据库

流程一:获取Advisor

Advisor组件
BeanFactoryTransactionAttributeSourceAdvisor

BeanFactoryTransactionAttributeSourceAdvisor

流程二:解析@Transactional注解

@Transactional注解

@Transactional注解

AOP 解析@Transactional过程

解析@Transactional

TransactionAttributeSource组件

其中封装了所有的相关TransactionBeanDefinition。

TransactionAttributeSource接口

TransactionAttributeSource

AbstractFallbackTransactionAttributeSource(包含了AnnotationTransactionAttributeSource源码)

AbstractFallbackTransactionAttributeSource

TransactionDefinition组件
TransactionAttribute

TransactionAttribute

RuleBasedTransactionAttribute

RuleBasedTransactionAttribute

流程三:创建代理

这个过程没什么可讲的,和Spring AOP实现一模一样。其中没有事务功能的参与,唯一值得看的就是最后代理对象长什么样子。

CGLIb 创建代理举例

流程四: 实现拦截

拦截过程实现

Spring及Spring boot 第四章-第二节 Spring声明式事务管理 拦截过程

MethodInterceptor——TransactionInterceptor作为事务处理的主要场景入口

TransactionInterceptor

父类 TransactionAspectSupport

TransactionAspectSupport

TransactionManager组件——真正实现事务功能的开始
AbstractPlatformTransactionManager

AbstractPlatformTransactionManager

DataSourceTransactionManager —— 作为事务管理器封装了我们常见的事务操作

DataSourceTransactionManager
JdbcTransactionManager

TransactionInfo

TransactionInfo

ConnectionHolder

ConnectionHolder

声明式事务整合数据源的过程

声明式事务整合数据源的过程

声明式事务处理连接的过程——TransactionSynchronizationManager

TransactionSynchronizationManager

Spring声明式事务 ——自动配置

Spring及Spring boot 第四章-第二节 Spring声明式事务管理 @Transaction 自动配置作用

巩固
整个过程总结梳理

@Transaction AOP实现梳理

Spring 事务失效场景

Spring 事务失效场景

Spring传播行为源码分析一下

Spring传播行为源码分析一下

@Transactional注解加到类上和加到方法上有什么区别?

@Transactional注解加到类上和加到方法上有什么区别?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值