HandlerMapping 继承关系

**HandlerMapping**
只有一个方法:通过request获取handler
HandlerExecutionChain getHandler(HttpServletRequest request)
    
AbstractHandlerMapping----HandlerMapping的抽象实现
 --getHandler方法实现
 通过getHandlerInternal获取handler,该方法是子类实现的
 具体不同的子类实现方法不一样。
 若没有获取到则使用默认的handler
 handler转String,来获取bean
  • AbstractHandlerMapping
  • –AbstractUrlHandlerMapping
  • –AbstractHanlderMethodMapping

——————————–下面分两大类讲handlerMapping实现———————————————————————————————————————————————————

  • –AbstractHandlerMapping
  • —-AbstractHanlderMethodMapping
  • ——RequestMappingInfoHandlerMapping
  • ——–RequestMappingHandlerMapping

总结,常用 层次比较清晰:

AbstractHanlderMethodMapping—-AbstractHandlerMapping的子类

--getHandlerInternal来获取handler
----根据request获取lookupPath
----根据lookupPath和request获取HandlerMethod
----

RequestMappingInfoHandlerMapping—-AbstractHanlderMethodMapping的子类

RequestMappingHandlerMapping—-RequestMappingInfoHandlerMapping的子类


  • –AbstractHandlerMapping
  • —-AbstractUrlHandlerMapping
  • ——SimpleUrlHandlerMapping
  • ——–AbstractDetectingUrlHandlerMapping
  • ———-BeanNameUrlHandlerMapping
  • ———-AbstractControllerUrlHandlerMapping

总结,较少用 层次比较清晰,一层套一层: 首先在AbstractUrlHandlerMapping中设计了整体的结构,并完成了查找Handler的具体逻辑,其中需要提供一个保存url和Handler的对应关系的Map,这个map的内容是留给子类实现的,这里提供了注册方法:registerHandler。 初始化map有两种方法:SimpleUrlHandlerMapping通过手动在配置文件里注册 AbstractDetectingUrlHandlerMapping在spring容器里查找。查找分两类

AbstractUrlHandlerMapping—-AbstractHandlerMapping的子类

--getHandlerInternal来获取handler
通过lookupHandler获取handler
若没有获取到则 用rootHandler或者默认Handler
--lookupHandler
从map中获取handler,若没有获取到则通过Pattern匹配,获取handler
--  注
map获取通过registerHandler方法进行
该方法是子类调用初始化的

SimpleUrlHandlerMapping—-AbstractUrlHandlerMapping子类

--调用registerHandler是在initAppilicationContext中调用registerHandlers

AbstractDetectingUrlHandlerMapping—-AbstractUrlHandlerMapping子类

--调用registerHandler是在initAppilicationContext中调用的detectHandlers