org.springframework.jdbc.support.JdbcTransactionManager
org.springframework.transaction.interceptor.TransactionInterceptor
org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration
在执行业务方式时,会经过动态代理的拦截器方法org.springframework.aop.framework.CglibAopProxy.DynamicAdvisedInterceptor#intercept
,
该方法将所有Advisor中的Advice转成org.aopalliance.intercept.MethodInterceptor
,这些MethodInterceptor组合在一起形成一个MethodInvocation执行,经典的责任链模式。
如果该方法开启了事务,则会走到TransactionInterceptor#invoke(MethodInvocation)
方法
这里比较简单,重点这里继续调用了父类的TransactionAspectSupport#invokeWithinTransaction
方法,AnnotationTransactionAttributeSource
用于获取@Transactional
注解设置的属性值,封装在RuleBasedTransactionAttribute
中
org.springframework.transaction.TransactionDefinition
中定义了事务的隔离级别(ISOLATION_DEFAULT
)、事务传播属性(PROPAGATION_REQUIRED
)、超时时间、是否只读。org.springframework.transaction.interceptor.TransactionAttribute
中定义了使用哪个TransactionManager
,哪些异常应该执行回滚。