拦截器有几种写法?每种写法的应用场景都是固定的吗?

来源:7-5 使用线程本地变量存储会员信息

慕神4535282

2023-04-21

老师,不计LoginMemberFilter的话,我看到拦截器(以下两种写法都算是拦截器吧)至少都有两种写法了
写法1:

@Aspect
@Component
public class LogAspect {
    @Pointcut("execution(public * com.jiawa..*Controller.*(..))")
    public void controllerPointcut() {
    }

    @Before("controllerPointcut()")
    public void doBefore(JoinPoint joinPoint) {
    ...
    }
}

写法2:

@Component
public class MemberInterceptor implements HandlerInterceptor {
@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    ...
    }
}

我的疑问是:写法1中的class LogAspect ,可以写成写法2的形式吗?反之亦然。
每种写法的应用场景都是固定的吗?比如说:写法1只能用于公共模块common,不适用于特定模块member.
谢谢老师解答!

写回答

1回答

甲蛙

2023-04-23

写法1是AOP,写法2是过滤器,过滤器只能用在对接口的拦截,AOP可以拦截各种类,具体是在@Pointcut里配置。要写成什么样,看你拦截了要做什么?比如加日志号,那肯定是在接口入口拦截,此时两种都可以;比如你想记录所有service的入参出参,那就只能用aop了;比如你想获取请求头、请求体的信息,那就只能用拦截器了。

0
5
甲蛙
回复
慕神4535282
这样总结也可以。
2023-06-17
共5条回复

新版Springboot3.0打造能落地的高并发仿12306售票系统

最新版Spring3.0仿12306售票系统实战

852 学习 · 511 问题

查看课程