handlermapping主要功能是為請(qǐng)求找到合適的handler和interceptors,并組合成HandlerExecutionChain。查找handler的過程通過getHandlerInternal方法實(shí)現(xiàn),每個(gè)子類都其不同的實(shí)現(xiàn)。
所有的HandlerMapping的實(shí)現(xiàn)都繼承于AbstarctHandlerMapping,AbstarctHandlerMapping主要作用是完成攔截器的初始化工作。而通過AbstarctHandlerMapping又衍生出兩個(gè)系列,AbstractUrlHandlerMapping和AbstractHandlerMethodMapping。
AbstractUrlHandlerMapping也有很多子類的實(shí)現(xiàn),如SimpleUrlHandlerMapping、AbstractDetectingUrlHandlerMapping。總體來說,AbstractUrlHandlerMapping需要用到一個(gè)保存url和handler的對(duì)應(yīng)關(guān)系的map,map的初始化工作由子類實(shí)現(xiàn)。不同的子類會(huì)有自己的策略,可以在配置文件中注冊(cè),也可以在spring容器中找。
AbstractHandlerMethodMapping系列則通常用于注解的方法,解析包含@Controller或者@RequestMapping注解的類,建立url和method的直接對(duì)應(yīng)關(guān)系,這也是目前使用最多的一種方式。