哟蛤 2021-04-03 17:46 采纳率: 28.6%
浏览 35
已采纳

spring事务传播机制REQUIRED

已知REQUIRED的情况下

假设外部事务Service A的Method A()调用内部事务ServiceB的MethodB()。

假如ServiceB.MethodB()运行的时候发现自己没有在事务中,它就会为自己分配一个事务(仅仅是为自己)

 

我在一开始测试的时候写的是Service A的Method A()调用Service A的Method B(),A没写事务,B标注事务了,但是出现错误的时候并没有发生回滚,和上面的对比一下,这是为什么呢?

 

  • 写回答

1条回答 默认 最新

  • 西红柿炒鸡蛋Ooo 2021-04-03 19:30
    关注

    因为aop底层是动态代理,service类有接口所以用的是jdk动态代理。在调用serviceA的a方法,是调用的代理对象的a方法,代理程序处理完后,再调用代理对象关联的原对象的a方法(实际调用),a中再调用b方法时,是this.b(),这个this就是原对象而不是代理对象,所以a方法中b方法的调用并没有被代理,也就不会处理你的事务注解。 然而不同的servise调用的时候,A的a方法调用B的b方法,B是自动注入的,是被代理的,b方法的调用也会被代理。 同一个service方法彼此调用的时候会出现你说的问题,解决方案就是A中自动注入自己(@Autowrite ServiceA serviceA;),然后在a方法中调用b方法时使用(serviceA.b())而不是this.b()或者写到2个不同的方法,A中自动注入B

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器