標籤:修改 ring too pat work 入參 bsp ada 使用者
HandlerMapping
Spring mvc 使用HandlerMapping來找到並儲存url請求和處理函數間的mapping關係。
以DefaultAnnotationHandlerMapping為例來具體看HandlerMapping的作用
DefaultAnnotationHandlerMapping將掃描當前所有已經註冊的spring beans中的@requestmapping標註以找出url 和 handler method處理函數的關係並予以關聯。
Handleradapter
Spring MVC通過HandlerAdapter來實際調用處理函數。
以AnnotationMethodHandlerAdapter為例
DispatcherServlet中根據handlermapping找到對應的handler method後,首先檢查當前工程中註冊的所有可用的handlerAdapter,根據handlerAdapter中的supports方法找到可以使用的handlerAdapter。通過調用handlerAdapter中的handle方法來處理及準備handler method中的參數及annotation(這就是spring mvc如何將reqeust中的參數變成handle method中的輸入參數的地方),最終調用實際的handle method。
detectAllHandlerMappings
預設情況下spring mvc 將載入 當前系統中所有實現了HandlerMapping介面的bean。如果只期望spring mvc載入指定的handlermapping時,可以修改web.xml中的DispatcherServlet的初始參數,將detectAllHandlerMappings的值設定為false
Xml代碼
- <init-param>
- <param-name>detectAllHandlerMappings</param-name>
- <param-value>false</param-value>
- </init-param>
此時spring mvc將尋找名 為“handlerMapping”的bean並作為當前系統中唯一的handlermapping。
如果沒有定義handlerMapping的話,則spring mvc將按照org.springframework.web.servlet.DispatcherServlet所在目錄下的DispatcherServlet.properties中所定義的org.springframework.web.servlet.HandlerMapping的內容來載入預設的handlerMapping(使用者沒有自訂Strategies的情況下)。
detectAllHandlerAdapters
作用和detectAllHandlerMappings類似,只不過作用對象為handlerAdapter。亦可通過
Xml代碼
- <init-param>
- <param-name>detectAllHandlerAdapters</param-name>
- <param-value>false</param-value>
- </init-param>
來強制系統只載入bean name 為” handlerAdapter”handlerAdapter。載入不到的情況下將按照DispatcherServlet.properties中所定義的org.springframework.web.servlet.HandlerAdapter的內容來載入預設的handlerAdapter。
Spring MVC 學習筆記 handlerMapping和handlerAdapter