• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zxc1234
V2EX  ›  程序员

关于 spring 事务失效

  •  
  •   zxc1234 · Apr 17, 2020 · 2598 views
    This topic created in 2228 days ago, the information mentioned may be changed or developed.

    网上找了一下 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 replies    2020-04-18 08:27:40 +08:00
    putaozhenhaochi
        1
    putaozhenhaochi  
       Apr 17, 2020 via Android
    可以了解下 Java 动态代理
    bobuick
        2
    bobuick  
       Apr 17, 2020
    你要是手动拿事务对象随便怎么都行。要是用 Spring 自己的事务注解,非 public 的方法都不行。它是基于动态代理实现的,动态代理正常情况下无法用在非 public 方法上
    zxc1234
        3
    zxc1234  
    OP
       Apr 17, 2020
    @putaozhenhaochi
    @bobuick 谢谢,请问 spring 事务是 jdk 动态代理还是 cglib 代理呢
    coer
        4
    coer  
       Apr 17, 2020 via iPad
    springboot 的 TransactionAutoConfiguration 类,默认是 cglib
    zxc1234
        5
    zxc1234  
    OP
       Apr 17, 2020
    @putaozhenhaochi
    @bobuick
    如果是 jdk 动态代理,但是好像在实际的开发中 service 并没有实现接口
    如果是 cglib 字节码织入,那么是不是 final 类的所有方法事务都不会生效呢?
    zxc1234
        6
    zxc1234  
    OP
       Apr 17, 2020
    @coer 那么是不是 final 类的所有方法,加事务都不会生效呢?
    luopengfei14
        7
    luopengfei14  
       Apr 18, 2020 via iPhone
    补充二楼,事物注解的方法必须由外部类调用。这样才能切面、生成代理管理事务
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6157 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 02:13 · PVG 10:13 · LAX 19:13 · JFK 22:13
    ♥ Do have faith in what you're doing.