Aop失效的场景以及解决办法
Aop失效的场景:
在同一个方法中方法互相调用,例如GoodServicce的a()方法调用了本类中的b()方法,Aop就会失效,同时被调用的b()方法的事务也失效,如下:
解决办法(一),拿到Spring给我们创建的代理,用代理调用就可以解决,解决如下:
解决办法(二),把我们要进行调用的方法移出本类,比如到一个公共的Service,然后注入公共Service的对象,再使用其进行调用:
1、新建公共Service
2、注入对象再进行调用
3、注入自己类型的代理对象
@Service public class OrderServiceImpl implements OrderService { @Autowired private OrderService orderService; public List<Order> findAll(){ orderService.noAop(); // 使用代理对象调用,不会使AOP失效 } public void noAop(){ // 逻辑代码 } }
至此,就解决了。