例如:
Class UserService{
public void A(){
this.B()
}
@Transactional
public void B(){
//TODO 增删改查
}
}
以上调用方式会导致事务失效。
失效原因:事务是spring中的增强代码,需要通过代理类调用才能走到增强代码,以上代码中,同一个类的调用,不需要走代理,所以走不到增强代码块,所以事务就没有起到作用。
常见的两种解决办法:
1、方法B和方法A不在一个类(最笨但是也好用的办法)
Class UserService{
@Autowired
UserService2 userService2;
public void A(){
this.B()
}
}
Class UserService2{
@Transactional
public void B(){
//TODO 增删改查
}
}
2、使用AopContxt.currentProxy()调用方法B
需要在类上添加:@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)