核心逻辑是针对当前类,生成动态代理对象,将需要事务处理功能的 Bean method 代理至 TransactionAspectSupport.invokeWithinTransaction
进行统一事务处理
目前版本的抽象是 PlatformTransactionManager, 相应的 ORM 要集成都会实现这个抽象
处理容器内 service 层、controller 层等非 Repository 层 @Transactional 注解增强
org.springframework.boot.autoconfigure.transaction
TransactionAutoConfiguration
jta.JtaAutoConfiguration
实际委托给了 @EnableTransactionManagement 处理,再根据配置选择使用 aspectJ 代理或者 jdk 代理
org.springframework.transaction.aspectj.JtaAnnotationTransactionAspect 和 AnnotationTransactionAspect 分别切入 spring 自家 Transactional 注解和 JTA transactional 注解,最终由统一抽象 AbstractTransactionAspect.invoke 调用 TransactionAspectSupport.invokeWithinTransaction 进行事务处理
org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration 声明以下 Bean