1、示例类:
public interface AService{
void a();
void b();
}
@Service
public class AServiceImpl implements AService{
@Transactional(propagation=Propagation.REQUIRED)
public void a(){
this.b();
}
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void b(){
}
}
2、此处的this指向目标对象,因此调用this.b()将不会执行b事务切面,即不会执行事务增强。因此b方法的事务定义
“@Transactional(propagation=Propagation.REQUIRES_NEW)”将不会实施。为了解决这个问题,可以这样做:
<aop:aspectj-autoproxy expose-proxy="true" />
我们将以上代码中的"this.b();",修改为“((AService)AopContext.currentProxy()).b();”即可。
通过以上的修改便可以完成对a和b方法的同时增强。
public interface AService{
void a();
void b();
}
@Service
public class AServiceImpl implements AService{
@Transactional(propagation=Propagation.REQUIRED)
public void a(){
this.b();
}
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void b(){
}
}
2、此处的this指向目标对象,因此调用this.b()将不会执行b事务切面,即不会执行事务增强。因此b方法的事务定义
“@Transactional(propagation=Propagation.REQUIRES_NEW)”将不会实施。为了解决这个问题,可以这样做:
<aop:aspectj-autoproxy expose-proxy="true" />
我们将以上代码中的"this.b();",修改为“((AService)AopContext.currentProxy()).b();”即可。
通过以上的修改便可以完成对a和b方法的同时增强。