MyBatis-Spring-Boot
MyBatis-Spring-Boot copied to clipboard
Springboot用aop做日志,mybatis通用mapper基类的方法都没有切入
系统使用了mybatis的插件通用mapper https://github.com/abel533/Mapper 做基类,其他mapper继承这个基类以减少对常规curd的编码。
现在的问题是发现所有基类方法如insert, delete, selectAll 等都无法被拦截,而且如果有方法调用了这些基类方法,也无法被拦截。
定义的注解AuditServiceLog
LogAspect
定义在controller上表现正常
访问对应页面会有日志
定义在没有调用通用mapper方法的service或者handler方法上也ok
而使用了通用mapper方法的则一律没有反应
这里UserService里面调用通用mapper的方法,导致整个UserService上面的方法都不能被拦截。
同时不使用注解直接使用execution语法的方式也尝试过。症状类似,通用mapper的方法被忽略 @Pointcut("execution(* com.hry.spring.mvc.aop.log.service...(..))")
aop的配置为springboot默认
有同事使用常规spring mvc(非springboot)通过xml配置的方法,似乎没有特别配置通用mapper就可以被拦截。是这两者有什么区别吗?烦请赐教
这个问题应该和通用 Mapper 没关系。
我也遇到这个问题,拦截不了
我这边已经可以了,是自己忘了在@Aspect的类上面加@Component @chris4dd 你的execution 貌似有问题,你试着改成* com.xxx.xx..(..) 具体我没有深入execution
1.你的UserService不是基于接口的,所以你需要修改aop为基于cglib的方式; 2.mapper接口在低版本(5.x之前)无法被代理,因为mapper接口方法的调用是通过代理类来完成的,参考:https://cloud.tencent.com/developer/article/1170370