编写切面时遇到的问题
1.切面前置通知执行两次
前置通知内容为鉴权,在测试时发现抛出异常和捕获异常的操作会执行两次,经过排查,发现原来的代码将统一异常处理类放到了controller包下,而切点声名路径就是controller包,因此当出现异常时,会被捕获,在执行handler方法前还会执行切面方法,导致前置通知执行两次。
解决方案:更加精确地定义切点。
@Pointcut("execution(public * com.xes.studentrecord.controller.*.*(..)) && !execution(public * com.xes.studentrecord.controller.BaseController.*(..))")
总结:要注意代码结构,如果代码结构不够规范,就会出现这种问题。

浙公网安备 33010602011771号