RequestMappingHandlerMapping 是 Spring MVC 框架中的一个核心组件,负责 将 HTTP 请求(URL、方法类型等)映射到对应的 @Controller 方法。它是 Spring Web 请求处理流程的关键部分,用于实现 @RequestMapping、@GetMapping、@PostMapping 等注解的路由功能。
1. 主要作用
RequestMappingHandlerMapping 的主要职责是:
扫描所有
@Controller或@RestController类,收集带有@RequestMapping(及其派生注解,如@GetMapping)的方法。建立请求路径(URL)与控制器方法的映射关系,例如:
/api/users→UserController.getUsers()/api/orders→OrderController.createOrder()
在接收到 HTTP 请求时,根据请求的 URL 和 HTTP 方法(GET/POST/PUT/DELETE 等)找到对应的
HandlerMethod(即最终要执行的方法)。
2. 内部工作原理
(1) 初始化阶段(应用启动时)
Spring 容器启动时,
RequestMappingHandlerMapping会:扫描所有
@Controller类。解析类和方法上的
@RequestMapping注解,生成RequestMappingInfo(存储 URL、HTTP 方法、请求头等匹配条件)。将映射关系注册到内部的
MappingRegistry(一个路由表)。
(2) 请求处理阶段(运行时)
当 HTTP 请求到达时,
DispatcherServlet会调用RequestMappingHandlerMapping.getHandler():根据请求的 URL 和 HTTP 方法,从
MappingRegistry中查找匹配的HandlerMethod。返回
HandlerExecutionChain(包含目标方法 + 相关的拦截器)。
3. 关键方法
4. 与其他组件的关系
DispatcherServlet:
Spring MVC 的前端控制器,调用RequestMappingHandlerMapping获取处理器。HandlerAdapter:
实际执行HandlerMethod的组件(如调用@Controller方法并处理参数绑定)。HandlerInterceptor:
拦截器,在HandlerMethod执行前后插入逻辑(如权限检查、日志)