springMvc源碼解讀--HandlerMapping

  • HandlerMapping:它的做用是根據request找到相應的處理器handler和interceptors,HandlerMapping接口裏面只有一個方法HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;只要使用request就會返回一個HandlerExecutionChain,固然咱們能夠定義本身的實現類來實現。
  • HandlerMapping的類的繼承結構

clipboard.png
能夠看到HandlerMapping家族的成員有兩隻,一支繼承AbstractUrlHandlerMapping,另外一個繼承與AbstractHandlerMethodMapping,AbstractHandlerMapping是HandlerMapping的抽象類實現,全部HandlerMapping的實現都繼承於AbstractHandlerMapping,AbstractHandlerMapping採用模版的設計模式設計了HandlerMapping實現的總體結構,子類須要經過模版方法提供一些初始值和具體的算法,AbstractHandlerMapping保存了全部的配置的interceptors,在獲取到handler後會根據從request提取的lookupPath將相應的interceptors裝配上去。java

  • public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport implements HandlerMapping, Ordered 從中可知,AbstractHandlerMapping繼承於WebApplicationObjectSupport,初始化的時候會自動的調用initApplicationContext模板方法,

/* java
@Override算法

protected void initApplicationContext() throws BeansException {
    extendInterceptors(this.interceptors); (1)
    detectMappedInterceptors(this.adaptedInterceptors); (2)
    initInterceptors(); (3)
}

*/
其中,extendInterceptors是模版方法,用於給子類提供一個添加interceptors的入口,detectMappedInterceptors方法用於將Spring MVC 的容器及父類容器中的全部MappedInterceptors的bean添加到mappedInterceptors中,initInterceptors方法的做用是初始化interceptor,具體內容實際上是將interceptors屬性裏所包含的對象按類型添加到MappedInterceptors或adaptedInterceptors設計模式

相關文章
相關標籤/搜索