Spring MVC 框架核心解析(2025 最新版,大厂面试+实战必备)
2025 年 Spring MVC 依然是 Java 后端最主流的 Web 框架(与 WebFlux 并存),阿里、字节、腾讯、美团、京东 90% 以上的传统服务仍然跑在 Spring MVC 上。以下内容全部来自 Spring 6.2 + Spring Boot 3.3 最新源码 + 大厂真实面试题。
一、Spring MVC 整体架构(记住这张图就够了)
用户请求
↓ (HttpServletRequest/HttpServletResponse)
前端控制器 DispatcherServlet(核心中的核心!)
↓
HandlerMapping → 找到能处理该请求的 Controller 方法(@RequestMapping)
↓
HandlerAdapter → 真正执行 Controller 方法(支持各种 Handler 类型)
↓
Controller 方法执行(返回 String / ModelAndView / @ResponseBody 对象等)
↓
ViewResolver(可选) → 把逻辑视图名(如 "success")解析成真正的视图(Thymeleaf/JSP/FreeMarker)
↓
最终渲染响应给浏览器
面试必背一句话:
“Spring MVC 的核心是 DispatcherServlet,所有请求都统一由它分发处理,九大组件协同完成一次请求。”
二、Spring MVC 九大核心组件(面试必问!背会直接加20分)
| 组件 | 作用 | 典型实现类 |
|---|---|---|
| 1. HandlerMapping | URL → Controller 方法映射 | RequestMappingHandlerMapping(主流) |
| 2. HandlerAdapter | 真正执行各种类型的 Handler | RequestMappingHandlerAdapter(最重要) |
| 3. HandlerExceptionResolver | 统一异常处理 | ExceptionHandlerExceptionResolver(@ControllerAdvice) |
| 4. ViewResolver | 逻辑视图名 → 真实 View | InternalResourceViewResolver(JSP)、ThymeleafViewResolver |
| 5. RequestToViewNameTranslator | 当 Controller 返回 null 时,根据请求自动推断视图名 | DefaultRequestToViewNameTranslator |
| 6. LocaleResolver | 解析用户区域(国际化 i18n) | AcceptHeaderLocaleResolver(默认) |
| 7. ThemeResolver | 主题切换(皮肤) | FixedThemeResolver |
| 8. MultipartResolver | 文件上传解析 | StandardServletMultipartResolver |
| 9. FlashMapManager | Redirect 重定向时传递数据(PRG 模式) | SessionFlashMapManager |
2025 年最常考的是前三个,尤其是 HandlerMapping + HandlerAdapter 的执行流程。
三、一次请求完整执行流程(手绘图必备!)
1. 用户发送 /user/1 → Tomcat → DispatcherServlet.doDispatch()
2. HandlerMapping 遍历所有 @RequestMapping,找到最佳匹配的 HandlerMethod
└→ RequestMappingHandlerMapping(基于 @RequestMapping 注解)
3. 拿到 HandlerExecutionChain(HandlerMethod + 拦截器列表)
4. HandlerAdapter 执行 Handler
└→ RequestMappingHandlerAdapter.invokeHandlerMethod()
↓
① 参数解析器(HandlerMethodArgumentResolver 共 27 种)
- @PathVariable、@RequestParam、@RequestBody、@ModelAttribute、实体类等
② 执行目标方法(反射 invoke)
③ 返回值处理器(HandlerMethodReturnValueHandler 共 18 种)
- @ResponseBody → MappingJackson2HttpMessageConverter(JSON)
- String → ViewName
- ModelAndView → 视图渲染
5. 拦截器 postHandle → render → afterCompletion
6. 响应写出
四、最重要的两大类神器(2025 年必考)
1. 参数解析器(27 种,常见 12 种)
| 解析器 | 能解析什么参数 |
|---|---|
| RequestParamMethodArgumentResolver | @RequestParam |
| PathVariableMethodArgumentResolver | @PathVariable |
| RequestResponseBodyMethodProcessor | @RequestBody + @ResponseBody |
| ModelAttributeMethodProcessor | 普通 JavaBean(无注解也行) |
| RequestPartMethodArgumentResolver | @RequestPart(文件上传) |
| ServletRequestMethodArgumentResolver | HttpServletRequest |
| ServletResponseMethodArgumentResolver | HttpServletResponse |
| RedirectAttributesMethodArgumentResolver | 重定向时传参 |
| ModelMethodProcessor | Model |
2. 返回值处理器(18 种,常见 10 种)
| 处理器 | 处理什么返回值 |
|---|---|
| RequestResponseBodyMethodProcessor | @ResponseBody 标注的对象(JSON) |
| ViewNameMethodReturnValueHandler | 返回 String 作为视图名 |
| ModelAndViewMethodReturnValueHandler | 返回 ModelAndView |
| ViewMethodReturnValueHandler | 返回 View 对象 |
| HttpEntityMethodProcessor | 返回 ResponseEntity |
五、@RestController vs @Controller 区别(99%的人答不全)
| 项目 | @Controller | @RestController |
|---|---|---|
| 组成 | 仅 @Component | = @Controller + @ResponseBody |
| 返回值默认处理 | 走 ViewResolver(视图解析) | 直接写响应体(JSON/XML) |
| 典型使用场景 | 返回页面(Thymeleaf、JSP) | 前后端分离接口 |
六、拦截器 vs 过滤器 vs AOP(面试三连问)
| 维度 | Filter(Servlet) | Interceptor(Spring MVC) | AOP(Spring) |
|---|---|---|---|
| 所属框架 | Java EE | Spring MVC | Spring |
| 作用范围 | 所有请求(包括静态资源) | 仅 DispatcherServlet 处理的请求 | 任意 Bean 方法 |
| 执行时机 | DispatcherServlet 前后 | Handler 执行前后(3 个回调) | 方法执行前后 |
| 是否可访问参数 | 可以 | 可以(HandlerMethod) | 可以(JoinPoint) |
| 典型用途 | 编码、登录校验、CORS | 权限校验、日志、事务开启 | 事务、缓存、日志 |
七、文件上传核心解析( MultipartResolver )
Spring Boot 3.x 默认使用 StandardServletMultipartResolver(基于 Servlet 3.0 Part API)
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 100MB
接收方式:
@PostMapping("/upload")
public String upload(@RequestPart("file") MultipartFile file) { ... }
八、2025 年最新热点补充
| 特性 | 说明 |
|---|---|
| Spring MVC + GraalVM Native | 支持 AOT 编译,启动时间 < 50ms,冷启动性能提升 10 倍+ |
| 虚拟线程(Project Loom)支持 | Spring MVC 6.1+ 完全支持 Java 21 虚拟线程(@EnableVirtualThreads) |
| 问题排查新方式 | Spring Boot 3.2+ 内置 RequestMapping 映射表端点(/actuator/mappings) |
九、一句话总结(面试结束前必说)
“Spring MVC 的本质是:一个 DispatcherServlet + 基于注解的 HandlerMapping/HandlerAdapter + 27 种参数解析器 + 18 种返回值处理器 + 拦截器链 + 异常处理体系,共同构成了目前最成熟、最灵活的 Web 框架。”
把上面内容 + 流程图背熟 + 手写一次请求流程,2025 年 Spring MVC 面试基本无敌!
需要我给你出配套的:
- 手绘流程图高清版
- 30 道 Spring MVC 真题 + 标准答案
- 源码级参数解析器执行顺序图
直接说一声,秒发!冲!