spring mvc 关键接口 HandlerMapping HandlerAdapter
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?
- <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。亦可通過?
- <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。?
轉載于:https://www.cnblogs.com/luoluoshidafu/p/6854333.html
總結
以上是生活随笔為你收集整理的spring mvc 关键接口 HandlerMapping HandlerAdapter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黄山风景区本地人有优惠吗
- 下一篇: 求一个qq男生两字网名