Spring事务源码分析
2023-12-26 09:20:55 78 举报
Spring事务源码分析
作者其他创作
大纲/内容
TransactionAttributeSource事务属性源
pointcut 属性
回滚/提交txInfo.getTransactionManager()
invokeWithinTransaction()
1、创建一个事务对象,并设置DataSource2、 如果未提供事务定义,则使用默认的事务定义3、如果事务已经存在,根据事务传播行为设置,进行事务处理4、检查事务超时设置。5、如果不存在事务,根据事务传播行为进行事务创建或者抛出异常6、事务挂起策略等等
import
Advice/Interceptor通知/拦截器
findCandidateAdvisors找到IOC中的候选通知 Advisor
TransactionAttributeSourcePointcut
数据库连接池是共用连接,所以需要保存连接旧事务的信息:隔离级别等,并为连接设置新的隔离级别,autoConnit等
txInfo.getTransactionManager()
继承
TransactionInterceptor
invoke(MethodInvocation invocation)
根据事务异常属性配置,来处理异常 提交或者回滚
LinkedHashSet将目标类和目标类的所有接口class也加入classes集合中
(PointcutAdvisor) advisor .getPointcut()
双重for遍历classes中每个类的每个方方法 调用 matches 进行匹配
依赖
getTransaction
@Configuration配置类
JdkDynamicAopProxy
createProxy() 根据撇匹配到的通知和切面长常创建代理对象
AopUtils
图示说明
获取事务配置属性 TransactionAttributeSource
findEligibleAdvisors 找到合适的增强器对象
commit(txInfo.getTransactionStatus());
BeanFactoryTransactionAttributeSourceAdvisor
实现了 MethodMatcher 接口用于匹配目标方法
TransactionAspectSupport
postProcessAfterInitialization 对象创建完,初始化后会,调用后置处理器的方法
事务管理器获取一个事务 tm.getTransaction(txAttr)
invocation.proceed()
findCandidateAdvisors判断能不能应用到当前类上 Advisor
super.getAdvicesAndAdvisorsForBean 获取bean的增强器对象
@Bean
获取事务管理器 PlatformTransactionManager
@EnableTransactionManagement注解做了哪些事情
根据需要创建一个事务createTransactionIfNecessary
super.wrapIfNecessary 如果需要代理对象,就返回目标对象的代理
解析:@Transactional注解,事务的传播行为、隔离级别、回滚策略等1、默认只允许public方法加事务,可以进行配置。2、优先级。类级别>接口级别;类/接口 > 方法级 类级别:先从类方法中计算TransactionAttribute再从方法所在类上计算 TransactionAttribute接口级别:先从接口方法中计算TransactionAttribute最后从接口中计算TransactionAttribute
执行业务方法 invocation.proceedWithInvocation();
事务正常提交或者异常回滚会重置连接的事务设置,使用上面保存的旧的事务设置信息。
InfrastructureAdvisorAutoProxyCreator
BeanPostProcessor 后置处理器
@EnableTransactionManagement
AnnotationTransactionAttributeSource
业务方法
PlatformTransactionManager
methodA
ProxyTransactionManagementConfiguration
rollback(txInfo.getTransactionStatus());
TransactionManagementConfigurationSelector
正常结束提交事务 commitTransactionAfterReturning(txInfo);
Pointcut 切点
getTransactionAttributeSource
事务方法执行调用流程
Advisor 方面/切面/顾问
@Import()
AutoProxyRegistrar
容器启动时 创建事务代理对象主要流程
0 条评论
下一页