RequestMappingHandlerMappingSpring MVC 框架中的一个核心组件,负责 将 HTTP 请求(URL、方法类型等)映射到对应的 @Controller 方法。它是 Spring Web 请求处理流程的关键部分,用于实现 @RequestMapping@GetMapping@PostMapping 等注解的路由功能。

1. 主要作用

RequestMappingHandlerMapping 的主要职责是:

  1. 扫描所有 @Controller@RestController,收集带有 @RequestMapping(及其派生注解,如 @GetMapping)的方法。

  2. 建立请求路径(URL)与控制器方法的映射关系,例如:

    • /api/usersUserController.getUsers()

    • /api/ordersOrderController.createOrder()

  3. 在接收到 HTTP 请求时,根据请求的 URL 和 HTTP 方法(GET/POST/PUT/DELETE 等)找到对应的 HandlerMethod(即最终要执行的方法)。

2. 内部工作原理

(1) 初始化阶段(应用启动时)

  • Spring 容器启动时,RequestMappingHandlerMapping 会:

    1. 扫描所有 @Controller 类。

    2. 解析类和方法上的 @RequestMapping 注解,生成 RequestMappingInfo(存储 URL、HTTP 方法、请求头等匹配条件)。

    3. 将映射关系注册到内部的 MappingRegistry(一个路由表)。

(2) 请求处理阶段(运行时)

  • 当 HTTP 请求到达时,DispatcherServlet 会调用 RequestMappingHandlerMapping.getHandler()

    1. 根据请求的 URLHTTP 方法,从 MappingRegistry 中查找匹配的 HandlerMethod

    2. 返回 HandlerExecutionChain(包含目标方法 + 相关的拦截器)。


3. 关键方法

方法

说明

getHandler(HttpServletRequest request)

根据请求找到匹配的 HandlerExecutionChain(包含 HandlerMethod)。

getHandlerMethods()

返回所有注册的请求映射关系(Map<RequestMappingInfo, HandlerMethod>)。

registerMapping()

动态注册新的请求映射(较少使用)

4. 与其他组件的关系

  • DispatcherServlet
    Spring MVC 的前端控制器,调用 RequestMappingHandlerMapping 获取处理器。

  • HandlerAdapter
    实际执行 HandlerMethod 的组件(如调用 @Controller 方法并处理参数绑定)。

  • HandlerInterceptor
    拦截器,在 HandlerMethod 执行前后插入逻辑(如权限检查、日志)