spring 类中方法互相调用 事务失效

同一个类中的方法互相调用,导致配置的事务失效。

例如:class ServiceA {

@Transactional(propagation=Propagation.REQUIRED)

public methodA(){

  this.methodB();

}

@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)

public methodB(){

}

methodA中直接通过this调用methodB,就会导致methodB配置的requires_new的事务失效,而加入methodA配置的事务。要解决此问题,必先搞清楚动态代理的原理。

代理就是对原有对象生成代理,控制原有对象方法的调用。动态代理,就是在运行时生成代理对象。methodA通过this调用methodB,这里的this就是原有对象,要想methodB配置的事务能生效,必须通过代理对象去调用。

方法1:context.getBean(ServiceA.class)。因ServiceA含有Transactional注解,容器生成的bean就是代理对象。

 

方法2:通过如下方式调用:((ServiceA)AopContext.currentProxy()).methodB()

注意,要设置

你可能感兴趣的:(spring,spring,类方法,事务失效)