1.这里调过创建代理过程,直接看核心主流程部分
//选择合适的事务管理器
final TransactionManager tm = determineTransactionManager(txAttr);
//创建事务
TransactionInfo txInfo = createTransactionIfNecessary(ptm, txAttr, joinpointIdentification);
Object retVal;
try {
//执行真实方法
retVal = invocation.proceedWithInvocation();
}
catch (Throwable ex) {
//发生异常时调用,主要是调用connection的rollback方法
completeTransactionAfterThrowing(txInfo, ex);
throw ex;
}
finally {
//清理事务信息
cleanupTransactionInfo(txInfo);
}
//提交事务
commitTransactionAfterReturning(txInfo);