前言
SpringBoot事务的源码就是通过AOP原理实现了,也是有切面的相关概念,当要实例化的Bean有事务增强器的时候会生成一个代理对象,然后先调用通知的方法进行拦截也就是事务开启、关闭、回滚等。然后再调用业务逻辑处理,本篇文章我先主要分析一下事务源码里面有哪些组件。
事务一些重要的组件类
TransactionAttribute
存储了@Transaction注解的一些信息,如隔离级别、传播特性等,它的实现是RuleBasedTransactionAttribute,我们看下该对象具体有哪些属性值,通过下图我们知道该对象就是包装了用户使用@Transaction注解时指定的属性值
TransactionAttribute运行数据截图
TransactionManager
事务管理器,它的默认实现是DataSourceTransactionManager,我们看看这个类具体有哪些属性值
DataSourceTransactionManager运行数据截图
可以看出事务管理器中包含数据源信息,它能利用数据源获取一个数据库的连接进行相关的数据操作。
TransactionStatus
事务状态对象,它的默认实现是DefaultTransactionStatus,该对象保存着事务运行过程中的一些属性,当前是否是一个新事务、事务保存点、是否需要回滚、还保存着挂起事务的连接资源我们看看该对象运行过程的属性值
DefaultTransactionStatus运行数据截图
TransactionInfo
事务中最重要的一个类就是该对象,它围绕了整个事务执行过程,它包含了数据源对象(TransactionManager)、事务隔离级别、传播特性(TransactionAttribute)、当前事务状态对象(TransactionStatus)、还有被挂起的事务的TransactionInfo。
TransactionInfo运行数据截图
TransactionInterceptor
用于实现事务管理的核心,TransactionInterceptor 使用 Spring AOP 来实现方法拦截。它将事务管理逻辑织入到目标方法的执行流程中,确保在方法执行前开启事务,在方法执行后提交或回滚事务,如果目标方法抛出未检查异常则 TransactionInterceptor 会回滚事务。
ConnectionHolder
该对象就是包含了数据库连接的Connection对象。
BeanFactoryTransactionAttributeSourceAdvisor
它是Spring 框架中用于支持声明式事务管理的一个关键组件。它是一个切面通知器(Advisor),主要用于从 Spring 的 BeanFactory 中获取事务属性(TransactionAttribute)并将其应用于被 @Transactional 注解标记的方法。
这篇文章主要简单的说明了事务管理中涉及的一些组件类,关于它们是如何加载到Spring容器内部的我将在下篇文章分析,如果大家喜欢我的文章请点赞关注,我们下期见。