贝利信息

Spring 中 @Transactional 的 AOP 通知实现原理详解

日期:2026-01-03 00:00 / 作者:心靈之曲

spring 的 `@transactional` 并非直接对应某个单一的 `advice` 类,而是由 `transactioninterceptor`(即环绕通知)配合 `transactionattributesource` 和事务管理器协同完成,其代理创建由 `infrastructureadvisorautoproxycreator` 触发。

在 Sp

ring AOP 体系中,@Transactional 的底层实现并非基于传统的 BeforeAdvice 或 AfterReturningAdvice,而是一个标准的 MethodInterceptor —— 即 org.springframework.transaction.interceptor.TransactionInterceptor。它本质上是一个 环绕通知(Around Advice),负责在目标方法执行前后开启、提交或回滚事务。

核心组件解析

简单验证示例

@Service
public class OrderService {
    @Transactional
    public void createOrder() {
        System.out.println("Creating order...");
        // 数据库操作
    }
}

当该 Bean 被 Spring 容器管理时,实际注入的 OrderService 是一个代理对象。调用 createOrder() 时,真正执行的是 TransactionInterceptor.invoke(),而非原始方法。

注意事项

掌握这一机制,不仅能理解事务如何工作,也为定制化事务行为(如扩展 TransactionAttributeSource 或替换 TransactionInterceptor)打下坚实基础。