问题
在controller层调用service的方法的时候,是可以被切入的,但是如果我们在service层 A方法中,调用B方法,切点切的是B方法,那么这时候是不会切入的
解决方法
解决方案就是把service目标对象的A方法中对B方法的调用(this.B())改成使用代理对象对B的调用,那么怎么获取代理对象呢?AopContext.currentProxy() 使用了保存了代理对象因此在A方法中使用【((Service) AopContext.currentProxy()).B()】就能解决切入失效的问题。
使用
- 在启动类上新增注解
@EnableAspectJAutoProxy(exposeProxy = true) //开启spring注解aop配置的支持
@MapperScan("com.xxx.mapper")
@SpringBootApplication
public class ProcessApplication{
public static void main(String[] args) {
SpringApplication.run(ProcessApplication.class, args);
}
}
- ((Service) AopContext.currentProxy()).B()
// 获取代理对象(事务)
IPyLoanService proxy = (IPyLoanService) AopContext.currentProxy();