Spring事务常见的坑

Posted hjrefueling

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring事务常见的坑相关的知识,希望对你有一定的参考价值。

Spring的两种代理方式:JDK动态代理和CGLIB动态代理

  • JDK动态代理

若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。
优点:因为有接口,所以使系统更加松耦合
缺点:为每一个目标类创建接口

  • CGLIB动态代理

若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。
优点:因为代理类与目标类是继承关系,所以不需要有接口的存在。
缺点:因为没有使用接口,所以系统的耦合性没有使用JDK的动态代理好。

 

在service内部调用增删改等包含事务操作的方法:

1.在内部调用必须获取service的代理类进行调用,不然直接调用会出现无事务现象(未经过代理,则事务无法织入,即此时调用的未普通方法,必不包含事务。)

2.获取代理对象方式:

(1)获取AopContext:

<aop:aspectj-autoproxy="true"-proxy"true"/>

((Service) AopContext.currentProxy()).callMethod(); 

(2)通过ApplicationContextjproxy=ctx.getBean(service);

proxy.callsMethod();

 






以上是关于Spring事务常见的坑的主要内容,如果未能解决你的问题,请参考以下文章

分析动态代理给Spring事务埋下的坑

分析动态代理给 Spring 事务埋下的坑

如何避免掉进spring事务不生效的坑中

spring 声明式事务的坑 @Transactional 注解

事务篇:Spring事务的坑,你都踩过吗?

Spring事务注意事项 以及 遇到的坑