🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
Spring使用AOP来实现声明式事务,Spring在默认情况下回对接口使用JDK动态代理技术,对具体实现类使用Cglib动态代理技术。 在切面配置的时候使用到的@Aspect注解,使用的是Aspectj框架的切面表达式,这个框架是一个由Java开发的基于静态代理的AOP框架。Aspectj支持的功能更加强大,支持对字段、POJO类进行增强,而Spring只支持对方法级别进行增强。引起Spring中还是采用动态代理的方式,但是会用到Aspectj框架中的切面表达式。 Spring基于方法级别的动态代理增强五种方式: - 前置增强 - 后置增强 - 环绕增强 - 异常抛出增强 - 引介增强:为目标类添加新的方法和属性。 **声明式事务通过环绕增强来实现:**在目标方法执行前开启事务,在目标方法执行之后提交或者回滚事务。   ## 事务传播行为 在@Transactional注解的propagation属性中指定。 Spring支持7种事务传播行为,用于确定客户端(Service1)与被调用端(Service2)的事务边界。 - PROPAGATION\_REQUIRED:方法必须在一个事务中运行,没有的话重启开启一个事务。 - PROPAGATION\_SUPPORTS:方法不用在一个事务中运行。 - PROPAGATION\_MANDATORY:必须在一个事务运行,没有抛出异常。 【参考】 - [Spring事务传播行为 - 掘金 (juejin.cn)](https://juejin.cn/post/6844903600943022088)