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事务的具体实现方式未知,因此推荐把注解加在实现类上,不然会带来很多的问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值