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