拦截器的执行顺序取决于具体技术栈和运行阶段,不过无论是哪种框架,核心思想都很类似:请求阶段正向执行,响应阶段反向执行(像栈一样)。下面按常见场景给你系统总结一下。
HandlerInterceptor
preHandle → controller 前
postHandle → controller 后,视图渲染前
afterCompletion → 整个请求完成后
preHandle
↓
Controller
↓
postHandle
↓
视图渲染
↓
afterCompletion
假设有两个拦截器:
Interceptor1
Interceptor2
registry.addInterceptor(new Interceptor1()).addPathPatterns("/**");
registry.addInterceptor(new Interceptor2()).addPathPatterns("/**");
Interceptor1.preHandle
↓
Interceptor2.preHandle
↓
Controller
↓
Interceptor2.postHandle
↓
Interceptor1.postHandle
↓
Interceptor2.afterCompletion
↓
Interceptor1.afterCompletion
✅ preHandle 正序执行
✅ postHandle / afterCompletion 逆序执行
WebFilter
@Order 或注册顺序决定WebFilter1 → WebFilter2 → handler → WebFilter2 → WebFilter1
Interceptor
@Intercepts 注解plugin → intercept → 目标方法 → 返回结果
✅ 所有拦截器 / 过滤器 / AOP 的本质都是“洋葱模型”
请求 → 拦截器1 → 拦截器2 → 业务
返回 ← 拦截器2 ← 拦截器1
| 类型 | 执行阶段 | 顺序特点 |
|---|---|---|
| Filter | Servlet 层 | 早于拦截器 |
| Interceptor | Spring MVC | Controller 前后 |
| AOP | 方法调用 | 最细粒度 |
整体顺序:
Filter → Interceptor → AOP → Controller
拦截器按注册顺序执行 preHandle,按逆序执行 postHandle 和 afterCompletion;请求像进栈,响应像出栈。
如果你用的是 某个具体框架(如 Spring Cloud Gateway、Dubbo、Vue axios),可以告诉我,我可以给你精确到源码级的执行顺序图。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。