声明式事务原理,传播机制,事务失效情况二

不同类中的方法互相调用:

当不同类中的方法相互调用时,如果这些方法都被 @Transactional 注解标记,并且被 Spring 代理管理,那么 Spring 的事务管理通常仍然会按照预期进行。然而,为了确保事务按照预期工作,需要注意以下几点:

Spring 代理机制:Spring 使用代理机制来管理事务。当一个类被 Spring 代理管理时,所有被 @Transactional 注解标记的方法都会被拦截,以便 Spring 可以在方法调用前后执行事务管理逻辑。

内部方法调用:如果一个被 @Transactional 注解标记的方法在同一个类中调用了另一个被 @Transactional 注解标记的方法,事务通常会按照预期进行,因为这两个方法都是通过 Spring 代理进行调用的。Spring 会将事务的开始、提交、回滚等操作适用于这两个方法。

java 复制代码
@Service
public class MyService {
    
    @Autowired
    private AnotherService anotherService;
    
    @Transactional
    public void method1() {
        // 事务逻辑
        method2(); // 内部调用另一个事务方法
    }
    
    @Transactional
    public void method2() {
        // 事务逻辑
    }
}

在上面的示例中,method1 调用了 method2,两者都被 @Transactional 注解标记,Spring 代理会管理这两个方法的事务。

跨类调用:如果一个被 @Transactional 注解标记的方法在一个类中调用了另一个类的方法,事务也通常会按照预期进行,前提是被调用的方法也被 Spring 代理管理。Spring 会将事务传播到被调用的方法。

java 复制代码
@Service
public class MyService {
    
    @Autowired
    private AnotherService anotherService;
    
    @Transactional
    public void method1() {
        // 事务逻辑
        anotherService.method3(); // 调用另一个类的事务方法
    }
}

在上面的示例中,method1 调用了 anotherService 类的 method3,前提是 AnotherService 类也被 Spring 所管理,并且 method3 也被 @Transactional 注解标记,Spring 代理会处理事务的传播。

总的来说,Spring 的声明式事务管理通常能够处理不同类中方法的相互调用,前提是被调用的方法也被 Spring 代理管理,并且使用适当的事务传播机制。可以根据具体的需求和业务逻辑配置和管理事务,以确保事务按照预期工作。

相关推荐
TT哇6 分钟前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
火烧屁屁啦29 分钟前
【JavaEE进阶】初始Spring Web MVC
java·spring·java-ee
w_312345443 分钟前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安1 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA1 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_19284999061 小时前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟1 小时前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S1 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos2 小时前
C++----------函数的调用机制
java·c++·算法
是小崔啊2 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴