方法调用方法事物失效问题
如下实例 中,此时事务是不生效的,因为@Transactional注解事务是通过代理来控制的,方法调用本类方法,事务不会生效。
@Service
public class TranditionalClassImpl implements TranditionalClass {
@Override
public void a() {
b();
}
@Transactional
public void b(){
System.out.println("do something");
}
}
可改成如下
@Service
@EnableAspectJAutoProxy(proxyTargetClass = true,exposeProxy = true)
public class TranditionalClassImpl implements TranditionalClass {
@Override
public void a() {
((TranditionalClass) AopContext.currentProxy()).b();
b();
}
@Transactional
public void b(){
System.out.println("do something");
}
}
或者
@Service
public class TranditionalClassImpl implements TranditionalClass {
@Autowired
TranditionalClass tranditionalClass;
@Override
public void a() {
this.tranditionalClass.b();
}
@Transactional
public void b(){
System.out.println("do something");
}
}