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
执行前后插入逻辑(如权限检查、日志)