handlermapping主要功能是为请求找到合适的handler和interceptors,并组合成HandlerExecutionChain。查找handler的过程通过getHandlerInternal方法实现,每个子类都其不同的实现。
所有的HandlerMapping的实现都继承于AbstarctHandlerMapping,AbstarctHandlerMapping主要作用是完成拦截器的初始化工作。而通过AbstarctHandlerMapping又衍生出两个系列,AbstractUrlHandlerMapping和AbstractHandlerMethodMapping。
AbstractUrlHandlerMapping也有很多子类的实现,如SimpleUrlHandlerMapping、AbstractDetectingUrlHandlerMapping。总体来说,AbstractUrlHandlerMapping需要用到一个保存url和handler的对应关系的map,map的初始化工作由子类实现。不同的子类会有自己的策略,可以在配置文件中注册,也可以在spring容器中找。
AbstractHandlerMethodMapping系列则通常用于注解的方法,解析包含@Controller或者@RequestMapping注解的类,建立url和method的直接对应关系,这也是目前使用最多的一种方式。