核心逻辑是针对当前类,生成动态代理对象,将需要事务处理功能的 Bean method 代理至 TransactionAspectSupport.invokeWithinTransaction 进行统一事务处理

目前版本的抽象是 PlatformTransactionManager, 相应的 ORM 要集成都会实现这个抽象

Spring Boot 配置

处理容器内 service 层、controller 层等非 Repository 层 @Transactional 注解增强

org.springframework.boot.autoconfigure.transaction

TransactionAutoConfiguration

jta.JtaAutoConfiguration

代理模式

实际委托给了 @EnableTransactionManagement 处理,再根据配置选择使用 aspectJ 代理或者 jdk 代理

aspectJ 增强

org.springframework.transaction.aspectj.JtaAnnotationTransactionAspect 和 AnnotationTransactionAspect 分别切入 spring 自家 Transactional 注解和 JTA transactional 注解,最终由统一抽象 AbstractTransactionAspect.invoke 调用 TransactionAspectSupport.invokeWithinTransaction 进行事务处理

jdk 代理切面增强配置

org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration 声明以下 Bean

其他

注解处理 annotation parser