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