Spring 源码硬核解析系列专题(六):Spring MVC 的请求处理源码解析

发布于:2025-03-01 ⋅ 阅读:(13) ⋅ 点赞:(0)

在前几期中,我们探讨了 Spring 的 IoC 容器、Bean 创建、AOP、事务管理以及 Spring Boot 的自动装配,这些为 Spring MVC 的运行奠定了基础。作为 Spring 生态中处理 Web 请求的核心模块,Spring MVC 通过 DispatcherServlet 实现了灵活的请求分发与处理。本篇将深入 DispatcherServlet 的源码,剖析其请求处理的全流程。

1. Spring MVC 的核心组件

Spring MVC 的工作基于 MVC 模式(Model-View-Controller),核心组件包括:

  • DispatcherServlet:前端控制器,统一处理所有请求。
  • HandlerMapping:映射请求到处理器(Controller)。
  • HandlerAdapter:适配并执行处理器方法。
  • ViewResolver:解析视图名称为具体视图。

这些组件通过 IoC 容器管理,协同完成请求处理。

2. DispatcherServlet 的基本配置

在 Spring Boot 中,spring-boot-starter-web 自动配置 Spring MVC:

@SpringBootApplication
public class MyApplication {
   
    public static void main(String[] args) {
   
        SpringApplication.run(MyApplication.class, args);
    }
}

@RestController
public class HelloController {
   
    @GetMapping("/hello")
    public String hello() {
   
        return "Hello, Spring MVC!";
    }
}
  • DispatcherServlet 默认注册为 Servlet,映射到 /

3. DispatcherServlet 的初始化

DispatcherServlet 继承自 FrameworkServlet,其初始化在 onRefresh() 中完成:

@Override
protected void onRefresh(ApplicationContext context) {
   
    initStrategies(context);
}

protected void initStrategies(ApplicationContext context) {
   
    initMultipartResolver(context);
    initLocaleResolver(context);
    initThemeResolver(context);
    initHandlerMappings(context);
    initHandlerAdapters(context);
    initHandlerExceptionResolvers(context);
    initRequestToViewNameTranslator(context);
    initViewResolvers(context);
    initFlashMapManager