定義請求到處理器的映射策略,核心方法:
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE:URL 在映射中的路徑BEST_MATCHING_PATTERN_ATTRIBUTE:最佳匹配模式INTROSPECT_TYPE_LEVEL_MAPPING:是否支援類級別映射URI_TEMPLATE_VARIABLES_ATTRIBUTE:URI 模板變量MATRIX_VARIABLES_ATTRIBUTE:矩陣變量PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE:可生產媒體類型實現 Ordered 接口定義優先級(值越小優先級越高),提供模板方法:
public final HandlerExecutionChain getHandler(HttpServletRequest request) {
Object handler = getHandlerInternal(request); // 子類實現具體映射邏輯
if (handler == null) handler = getDefaultHandler();
if (handler == null) return null;
if (handler instanceof String) {
handler = getApplicationContext().getBean((String) handler);
}
return getHandlerExecutionChain(handler, request); // 封裝攔截器鏈
}
getHandlerInternal():核心映射邏輯,子類實現extendInterceptors():子類自定義攔截器處理| 實現類 | 特點 | 適用場景 |
|---|---|---|
| BeanNameUrlHandlerMapping | Bean 名稱作為 URL | 傳統簡單映射 |
| SimpleUrlHandlerMapping | XML 顯式配置 URL-Bean 映射 | 集中式配置 |
| RequestMappingHandlerMapping | 掃描 @RequestMapping 註解 | 現代註解驅動開發(默認) |