spring同文件方法调用-》事务失效
@Service
public class Test{
void add(){
this.addOne();
}
@transactional(Exception.class)
void addOne(){
//插入异常不会回滚,
//原因说明:因为@Transactional的实现原理是AOP,AOP是动态代理,自己调用的过程不存在代理对象的调用,这样就不会产生AOP去为程序设置@Transactional注解所配置的参数
}
}
解决办法
核心:让程序使用代理对象
方法一
把两个方法拆开放到不同的类文件中
方法二
用自己注入的实例调用
@Service
public class Test{
@Autowired
private Test testService;
void add(){
//像这样
testService.addOne();
}
@transactional(Exception.class)
void addOne(){
//插入异常会回滚
}
}
方法三
获取代理类,利用代理类调用自己类的方法
@Service
public class Test{
@Autowired
private Test testService;
void add(){
//像这样
((Test)AopContext.currentProxy()).addOne();
}
@transactional(Exception.class)
void addOne(){
//插入异常会回滚
}
}