Spring声明式事务实现的原理

Spring的声明式事务管理是通过AOP(面向切面编程)和代理机制实现的。

第一步,在Bean初始化阶段创建代理对象

  • Spring容器在初始化单例Bean的时候,会遍历所有BeanPostProcessor实现类(BeanPostProcessor 是 Spring 提供的一个扩展接口,允许在 Bean 实例化、依赖注入和初始化之后,添加自定义的处理逻辑。它定义了两个方法:),并执行postProcessAfterInitialization方法。
  • 在执行postProcessAfterInitialization方法时会遍历容器中所有的切面,查找与当前Bean匹配的切面,获取事务的属性切面,也就是@Transactional注解及其属性值。
  • 然后根据得到的切面,创建一个代理对象,默认使用JDK动态代理创建代理,如果目标类是接口,则使用JDK动态代理,否则使用Cglib。

第二步,在执行目标方法时进行事务增强操作

当通过代理对象调用Bean方法的时候,会触发对应的AOP增强拦截器,声明式事务是一种环绕增强,对应接口为MethodInterceptor,事务增强对该接口的实现为TransactionInterceptor,

事务拦截器TransactionInteceptor在invoke方法中,通过调用父类TransactionAspectSupport的invokeWithinTransaction方法进行事务管理,
包括开启事务、事务提交、异常回滚等。

posted @ 2025-05-10 14:41  kuki'  阅读(67)  评论(0)    收藏  举报