拦截器有几种写法?每种写法的应用场景都是固定的吗?
来源: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回答
-
写法1是AOP,写法2是过滤器,过滤器只能用在对接口的拦截,AOP可以拦截各种类,具体是在@Pointcut里配置。要写成什么样,看你拦截了要做什么?比如加日志号,那肯定是在接口入口拦截,此时两种都可以;比如你想记录所有service的入参出参,那就只能用aop了;比如你想获取请求头、请求体的信息,那就只能用拦截器了。
052023-06-17
相似问题
异常拦截问题
回答 1
关于过滤器拦截的代码
回答 1