简介:
Interceptor和aop:依赖spring框架,基于java反射和动态代理实现,只能拦截controller的请求,可以获取ioc容器中的bean
拦截顺序:Interception > AOP > 具体执行的方法 > AOP > @ControllerAdvice > Interception
Interceptor
Interceptor是依赖于Spring框架,是aop的一种表现,基于Java的动态代理实现的。
使用步骤:
- 声明拦截器的类:通过实现 HandlerInterceptor接口,实现preHandle、postHandle和afterCompletion方法。
- 通过配置类配置拦截器:通过实现WebMvcConfigurer接口,实现addInterceptors方法。
举个栗子,上代码:
1.声明拦截器:MyInterceptor.java
public class MyInterceptor implements HandlerInterceptor{
/**
* 预处理回调方法,实现处理器的预处理(如检查登陆),第三个参数为响应的处理器
* 返回值:true表示继续流程(如调用下一个拦截器或处理器);false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
String methodName = method.getName();
System.out.println("====拦截到了方法:"+methodName+",preHandle====");
return true;
}
/**
* 后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null