关于 spring 事务失效 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zxc1234
V2EX    程序员

关于 spring 事务失效

  •  
      zxc1234 2020-04-17 18:46:52 +08:00 2251 次点击
    这是一个创建于 2002 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上找了一下 spring 事务失效的原因,感觉这篇文章比较好

    https://blog.csdn.net/andybbc/article/details/52913525

    这边文章中有个点想请教一下大伙:

    如果配置了事务, 就相当于又创建了一个类:UserServiceProxy

    public class UserServiceProxy extends UserService{ private UserService userService; ... public User getUserByName(String name){ User user = null; try{ // 在这里开启事务 user = userService.getUserByName(name);=======A 处 // 在这里提交事务 } catch(Exception e){ // 在这里回滚事务

     // 这块应该需要向外抛异常, 否则我们就无法获取异常信息了. // 至于方法声明没有添加异常声明, 是因为覆写方法, 异常必须和父类声明的异常"兼容". // 这块应该是利用的 java 虚拟机并不区分普通异常和运行时异常的特点. throw e; } return user; } ... 

    }

    疑问点是:文章说所有的 private 方法, final 方法 和 static 方法 都无法 直接 添加 spring 的事务管理功能是因为于 java 继承时, 不能重写 private , final , static 修饰的方法.

    可是在这边的 A 处不是可以放入 UserService 的由 private , final , static 修饰的方法吗?

    谢谢大伙~

    7 条回复    2020-04-18 08:27:40 +08:00
    putaozhenhaochi
        1
    putaozhenhaochi  
       2020-04-17 20:19:34 +08:00 via Android
    可以了解下 Java 动态代理
    bobuick
        2
    bobuick  
       2020-04-17 20:32:22 +08:00
    你要是手动拿事务对象随便怎么都行。要是用 Spring 自己的事务注解,非 public 的方法都不行。它是基于动态代理实现的,动态代理正常情况下无法用在非 public 方法上
    zxc1234
        3
    zxc1234  
    OP
       2020-04-17 22:03:43 +08:00
    @putaozhenhaochi
    @bobuick 谢谢,请问 spring 事务是 jdk 动态代理还是 cglib 代理呢
    coer
        4
    coer  
       2020-04-17 22:06:53 +08:00 via iPad
    springboot 的 TransactionAutoConfiguration 类,默认是 cglib
    zxc1234
        5
    zxc1234  
    OP
       2020-04-17 22:07:53 +08:00
    @putaozhenhaochi
    @bobuick
    如果是 jdk 动态代理,但是好像在实际的开发中 service 并没有实现接口
    如果是 cglib 字节码织入,那么是不是 final 类的所有方法事务都不会生效呢?
    zxc1234
        6
    zxc1234  
    OP
       2020-04-17 22:08:36 +08:00
    @coer 那么是不是 final 类的所有方法,加事务都不会生效呢?
    luopengfei14
        7
    luopengfei14  
       2020-04-18 08:27:40 +08:00 via iPhone
    补充二楼,事物注解的方法必须由外部类调用。这样才能切面、生成代理管理事务
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2840 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 14:11 PVG 22:11 LAX 07:11 JFK 10:11
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86