
目录一 结论1.1 结论说明1.2 原因二 案例说明2.1 A 无事务B 有事务A 调用 B2.2 A 有事务B 有事务A 调用 B2.3 解决办法一 结论1.1 结论说明java中同一个类中A方法没有事务B方法有事务A调用B方法则B方法事务失效若果同一个类中A方法有事务B方法有事务A调用B方法则B事务失效b隶属于A方法的事务。✅同类内部调用无论 A 有没有事务调用同类的 B带事务→B 事务一定失效✅跨类调用事务正常生效只要是同一个类内部方法调用自调用不管谁调谁被调用方的 Transactional 永远失效A 无事务 this 调 BTransactionalB 注解失效 →无事务A 有事务 this 调 BTransactionalB 注解失效 → 跑在 A 事务B 的传播属性完全无效REQUIRES_NEW 也开不出新事务A 有事务 this 调 B无注解B 没有事务注解 → 跑在 A 事务最正常没有迷惑点1.2 原因Spring 事务 完全依赖代理对象 生效。只有通过代理对象调用加了 Transactional 的方法事务才会开启。同类内部直接调用this. 方法 () → 不是代理调用 → 事务直接失效。二 案例说明2.1 A 无事务B 有事务A 调用 B结果B 的事务失效失效原因A 没有事务A 内部直接调用 B → 用的是this.B()不是代理对象 → Spring 感知不到Transactional→不开启事务。2.2 A 有事务B 有事务A 调用 B结果B 的事务 失效不会新开事务原因是A 有事务所以A 会开启事务但 A 内部调用 B 依然是 this.B()不是代理调用所以 B 上的 Transactional 完全无效B 会直接加入 A 的事务自己的传播机制、隔离级别全部不生效2.3 解决办法