zoukankan      html  css  js  c++  java
  • Spring声明式事务的实现方式选择(JDK动态代理与cglib)

    • 1、简介

    Spring声明式事务的具体实现方式是动态决定的,与具体配置、以及事务代理对象是否实现接口等有关。

    • 2、使用JDK动态代理的情况

    在满足下面两个条件时,Spring会选择JDK动态代理作为声明式事务的实现方式。

    (1)事务代理类必须实现接口且不能显式继承父类(Object这个父类不算)。

    (2)配置:springboot的启动类要加上@EnableTransactionManagement和@EnableAspectAutoProxy注解,且其中的proxyTargetClass属性要为默认的fasle,如果设置成了true就会开启cglib。

    注意:

    在这种情况下,@Transcation注解可以加在事务代理对象所实现的接口的方法上,也可以加在具体的实现类上。

    • 3、使用cglib的情况

    除了上述情况,Spring 会采用cglib方式来实现声明式事务。

    (1)比如业务类未实现接口。

    (2)proxyTargetClass=true时。

    当然,在这种情况下,@Transcation注解只能加在具体的实现类上。

    由于Spring事务的具体实现方式未知,因此推荐把注解加在实现类上,不然会带来很多的问题。

  • 相关阅读:
    [JZOJ3388] 绿豆蛙的归宿

    [JZOJ3464] 秀姿势
    [JZOJ3462] 休息
    [JZOJ3461] 小麦亩产一千八
    [JZOJ3509] 倒霉的小C
    [JZOJ1267] 路障
    CF52C Circular RMQ
    P4162 [SCOI2009]最长距离
    P4047 [JSOI2010]部落划分
  • 原文地址:https://www.cnblogs.com/MagicAsa/p/11749112.html
Copyright © 2011-2022 走看看