SpringMvc源碼解讀--AbstractUrlHandlerMapping系列
- SimpleUrlHandlerMapping定義了一個map變量,將全部的URL和handler的對應關係放在裏面,最後註冊在父類裏面,SimpleUrlHandlerMapping建立時經過重寫initApplicationContext調用registerHandlers方法完成handler的註冊,registerHandlers內部又調用父類的registerHandler方法將咱們註冊的URL的Map註冊到map之中。
- AbstractDetectingUrlHandlerMapping也是經過initApplicationContext來註冊handler的,裏面調用了detectHandlers方法,在detectHandlers方法中跟住配置的detectHandlersInAncestorContexts的參數從Spring mvc容器中找到全部的bean的beanName,而後利用determineUrlsForHandler方法對每個beanName解析出對應的urls,若是解析結果部位空的話,就將解析出的urls和beanName註冊到父類的map。AbstractDetectingUrlHandlerMapping有三個子類。其中BeanNameUrlHandlerMapping是檢查beanName和alias是否是以「/」開頭的,若是是則將其做爲URL,AbstractControllerUrlHandlerMapping是將實現了controller接口或者註解了@Controller的bean做爲Handler,而且能夠設置excludeClasses和excludePackages將不包含的bean或者不包含的包下的全部bean排除以外,determineUrlsForHandler方法負責將符合條件的handler找出來,而具體用什麼URL則使用模版方法determineUrlsForHandler交給子類去作。
歡迎關注本站公眾號,獲取更多信息