Spring事务剖析
Spring-tx包提供了事务支持。实现原理是利用aop机制,对申明事务的方法(方法上有@Transactional
注解)进行拦截,从而实现事务机制。本文不对spring事务使用进行深入分析,而是侧重分析其实现原理。
1. 结构介绍
1.1 事务方法拦截器TransactionInterceptor
org.springframework.transaction.interceptor.TransactionInterceptor
TransactionInterceptor
实现了MethodInterceptor
,用于拦截申明了事务的方法。其重要结构如下:
TransactionInterceptor
有两个重要的属性
TransactionManager transactionManager
,TransactionManager
接口本身没有提供任何方法。但在TransactionInterceptor
实现中,transactionManager需要实现接口PlatformTransactionManager
, 用于获取、提交和回滚事务。TransactionAttributeSource transactionAttributeSource
,用于从被拦截的方法上提取事务的信息
1.1.1 核心代码
invoke方法的核心逻辑
@Nullable
protected Object invokeWithinTransaction(Method method, @Nullable Class<?> targetClass,
final InvocationCallback invocation) throws Throwable {
// If the transaction attribute is null, the method is non-transactional.
TransactionAttributeSource tas = getTransactionAttributeSource();
// 从方法上提取事务信息
final TransactionAttribute txAttr = (tas != null ? tas.getTransactionAttribute(method