背景:当使用同一个service自身方法调用另一个自身方法,即使两个方法都使用了@translation,但事务依旧失效
目录
一、发生原因?
1:当任何一个请求进入service方法时,在进入方法之前会先开启一个切面来实现事务
2:任何一个ioc的对象,都是spring所代理的增强对象
3:这时候第一个方法会有切面包裹事务,但由这个方法进入本service另一个方法,相当于进入了普通方法,导致事务失效
二、如何解决?
1:可以在自己的service内部注入自己,一定要注入接口,且使用@Lazy注解,防止循环依赖问题
2:可以使用SPringUtils.getAopProxy得到一个代理对象
3:本质其实都是得到一个新的代理对象
注意
1:不推荐使用自己注入自己的方式,不雅观
2:SPringUtils.getAopProxy()本质为通过aopContext获得一个代理对象,会从线程中拿取