美文网首页
Spring事务代理机制总结(含代码Demo)

Spring事务代理机制总结(含代码Demo)

作者: longxingxiu | 来源:发表于2019-04-07 21:25 被阅读0次

    Spring事务代理机制总结:

    1、Spring声明式事务的底层是怎么实现的?
    • 通过Spring中的代理,那在Spring中生成代理的方式有几种?

    两种,JDK动态代理和CGLIB

    JDK动态代理只能用于带接口的,CGLIB则带不带接口都行(通过继承)

    2、假如有个接口,它包含两个方法a和b,然后有一个类实现了该接口。在该实现类里在a上标上事务注解、b上不标,此时事务是怎样的?

    a标注解了,肯定有事务,b没有注解,所以没有事务。

    那假设在方法b里调用方法a,其它保持不变,此时再调用方法b,会有事务吗?

    也不会,因为动态代理类中没有加事务注解的方法都不会进行增强,就算调用了目标类其他准备增加的方法。(见demo1)

    image.png
    3、对于没有实现接口的类,只能使用CGLIB来生成代理。假设有这样一个类,它里面包含public方法,protected方法,private方法,final方法,static方法,我都给它们加上事务注解,哪些方法会有事务呢?

    CGLIB确实是按照这种方式生成了子类作为代理,而且和父类在同一个包下。不过Spring选择让protected方法和package方法不支持事务,所以只有public方法支持事务。

    Demo1

    Github代码地址:Spring事务-代理增强

    相关文章

      网友评论

          本文标题:Spring事务代理机制总结(含代码Demo)

          本文链接:https://www.haomeiwen.com/subject/hlpybqtx.html