Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Springboot用aop做日志,mybatis通用mapper基类的方法都没有切入 #129

Open
chris4dd opened this issue May 14, 2018 · 4 comments

Comments

@chris4dd
Copy link

系统使用了mybatis的插件通用mapper https://github.com/abel533/Mapper 做基类,其他mapper继承这个基类以减少对常规curd的编码。

现在的问题是发现所有基类方法如insert, delete, selectAll 等都无法被拦截,而且如果有方法调用了这些基类方法,也无法被拦截。

定义的注解AuditServiceLog

ask1

LogAspect

ask2

定义在controller上表现正常

ask3

访问对应页面会有日志

ask4

定义在没有调用通用mapper方法的service或者handler方法上也ok

ask5
ask6

而使用了通用mapper方法的则一律没有反应

ask7
ask8

这里UserService里面调用通用mapper的方法,导致整个UserService上面的方法都不能被拦截。

同时不使用注解直接使用execution语法的方式也尝试过。症状类似,通用mapper的方法被忽略
@pointcut("execution(* com.hry.spring.mvc.aop.log.service...(..))")

aop的配置为springboot默认

ask9

有同事使用常规spring mvc(非springboot)通过xml配置的方法,似乎没有特别配置通用mapper就可以被拦截。是这两者有什么区别吗?烦请赐教

@abel533
Copy link
Owner

abel533 commented May 17, 2018

这个问题应该和通用 Mapper 没关系。

@jacky1193610322
Copy link

我也遇到这个问题,拦截不了

@jacky1193610322
Copy link

我这边已经可以了,是自己忘了在@aspect的类上面加@component
@chris4dd 你的execution 貌似有问题,你试着改成* com.xxx.xx..(..)
具体我没有深入execution

@glasses1989
Copy link

1.你的UserService不是基于接口的,所以你需要修改aop为基于cglib的方式;
2.mapper接口在低版本(5.x之前)无法被代理,因为mapper接口方法的调用是通过代理类来完成的,参考:https://cloud.tencent.com/developer/article/1170370

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants