孙哥Spring源码第29集

第29集 解析事务属性中的传播属性
【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】

1、事务属性有哪些?

  • 1、事务属性
  • 2、传播属性
  • 3、只读属性
    • 设置事务为只读,提高事务运行的效率 false
  • 4、超时属性
    • 超时属性 通过超时属性 设置本事务 最长一个等待时间 -1 由数据库底层决定 等待时间
  • 5、异常属性
    • RuntimeException 及其子类 默认回滚
    • Exception 及其子类 默认提交

2、请详细介绍下传播属性

为了解决传播属性 PROPAGATION 事务嵌套问题出现了传播属性
1. REQUIRED                    当前的这个业务方法  外部没有事务 开启事务   外部存在事务 则融合
2. REQUIRED_NEW         当前的这个业务方法  外部没有事务 开启事务   外部存在事务 挂起外部事务,开启新的事务,执行完新的事务,在还原外部事务继续执行
3. MANDATORY                 当前的这个业务方法 外部必须存在事务
4. NEVER                           当前的这个业务方法 外部一定不能存在事务  
5. SUPPORTS                    当前的这个业务方法  外部没有事务 则不开启事务,外部存在事务 则融合
6. NOT_SPPORTED          当前的这个业务方法  外部没有事务 则不开启事务,外部存在事务 抛异常
7. NESTED                         内嵌事务 SavePoint
image-20230519080710618

3、Spring对于事务属性底层 如何来实现 事务属性 所产生的效果呢?

ISOLATION READONLY TIMEOUT Spring 底层没有实现

4、ISOLATION READONLY TIMEOUT Spring的底层没有实现 谁实现了这3个事务属性呢?

  • JDBC 规范决定 ----> 驱动完成
    • conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
    • conn.setReadOnly(true);
    • conn.setNetworkTimeout();

5、Spring实现的有那些属性?

异常属性

1. try(RE E  instanceof RuntimeException Exception )
       conn.commit conn.rollback

传播属性

2. Spring实现 追源码的方式

6、Spring声明式事务AOP

第一个要注意的

  • 1、一定应用了代理【JDK或者Cglib】
  • 2、Spring在整理代理的过程中,它实际上是基于BeanPostProcessor,就是前面讲的AOP源码意识到的

第二个要注意的

  • 所谓的spring单机版事务 一定是依附于连接池 进而通过 连接的这些操作来控制事务,最后spring会把连接绑定在ThreadLocal当中

第三个要注意的

  • 1、JDBC和Mybatis都是依附于 DataSourceTransactionManager实现的是(PlatformTransactionManager接口)
  • 2、需要TransactionAttributes

7、基于注解讲解,剖析思路

1、BeanPostProcessor 创建代理
2、调用Service.xxx方法过程中 动态在运行时 原始功能+事务额外功能 整合在一起

8、EnableTransactionManagement解析

TransactionManagementConfigurationSelector解析

  • 1、截图EnableTransactionManagement
  • 2、查看属性含义【注意Order和Mode】
  • 3、@Import(TransactionManagementConfigurationSelector.class)
  • 4、查看TransactionManagementConfigurationSelector
    • 4.1、case Proxy,不用看ASPECTJ
    • 4.2、AutoProxyRegistrar是干什么的?AutoProxyRegistar 是一个ImportBeanDefinitionRegistrar
    • 4.3、ProxyTransactionManagementConfiguration是干什么的?ProxyTransactionManagementConfiguration是解析事务属性
      • 1、Advisor或者是Interceptor
      • 2、有advice ->TranactionManager
      • 3、transactionAttrbiutes 事务属性
  • 5、总结
    • image-20230519081527225

AutoProxyRegistrar解析

image-20230519081803908

调用AOPConfigUtils来处理注册处理事务的切面的BeanDefinition

image-20230519081709387

ProxyTransactionManagementConfiguration解析

image-20230519082036563

userService.register(user)的整个运行过程

image-20230519082134167

第29集学习目标

1、EnableTransactionManagement解析过程

  • @Import(TransactionManagementConfigurationSelector.class)
    • ProxyTransactionManagementConfiguration作用:创建切面,注册切面
    • AutoProxyRegistrar:作用注册BeanPostProcessor【InfrastructureAdvisorAutoProxyCreator】,获取切面,获取原始对象,创建代理。

2、@Transactional这个注解是怎么生效的呢是怎么创建代理的呢?

在执行BeanPostPrcessor执行到了InfrastructureAdvisorAutoProxyCreator这个BeanPostProcessor的beanPostProcessorAfter创建代理的时候,它会去检查当前方法或者当前类有没有@Transactional注解,有这个注解的话就会创建代理。在代理执行方法的时候会检查这个方法有没有这个注解,如果有这个注解才会进行代理事务的处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值