spring mvc 关键接口 HandlerMapping HandlerAdapter
HandlerMapping?
Spring mvc 使用HandlerMapping來找到并保存url請求和處理函數(shù)間的mapping關(guān)系。?
??
以DefaultAnnotationHandlerMapping為例來具體看HandlerMapping的作用?
? DefaultAnnotationHandlerMapping將掃描當(dāng)前所有已經(jīng)注冊的spring beans中的@requestmapping標(biāo)注以找出url 和 handler method處理函數(shù)的關(guān)系并予以關(guān)聯(lián)。?
Handleradapter?
Spring MVC通過HandlerAdapter來實際調(diào)用處理函數(shù)。?
以AnnotationMethodHandlerAdapter為例?
DispatcherServlet中根據(jù)handlermapping找到對應(yīng)的handler method后,首先檢查當(dāng)前工程中注冊的所有可用的handlerAdapter,根據(jù)handlerAdapter中的supports方法找到可以使用的handlerAdapter。通過調(diào)用handlerAdapter中的handle方法來處理及準(zhǔn)備handler method中的參數(shù)及annotation(這就是spring mvc如何將reqeust中的參數(shù)變成handle method中的輸入?yún)?shù)的地方),最終調(diào)用實際的handle method。?
detectAllHandlerMappings?
缺省情況下spring mvc 將加載 當(dāng)前系統(tǒng)中所有實現(xiàn)了HandlerMapping接口的bean。如果只期望spring mvc加載指定的handlermapping時,可以修改web.xml中的DispatcherServlet的初始參數(shù),將detectAllHandlerMappings的值設(shè)置為false?
- <init-param>??
- ????<param-name>detectAllHandlerMappings</param-name>??
- ????<param-value>false</param-value>??
- </init-param>??
此時spring mvc將查找名 為“handlerMapping”的bean并作為當(dāng)前系統(tǒng)中唯一的handlermapping。?
如果沒有定義handlerMapping的話,則spring mvc將按照org.springframework.web.servlet.DispatcherServlet所在目錄下的DispatcherServlet.properties中所定義的org.springframework.web.servlet.HandlerMapping的內(nèi)容來加載缺省的handlerMapping(用戶沒有自定義Strategies的情況下)。?
detectAllHandlerAdapters?
作用和detectAllHandlerMappings類似,只不過作用對象為handlerAdapter。亦可通過?
- <init-param>??
- ????<param-name>detectAllHandlerAdapters</param-name>??
- ????<param-value>false</param-value>??
- </init-param>??
來強制系統(tǒng)只加載bean name 為” handlerAdapter”handlerAdapter。加載不到的情況下將按照DispatcherServlet.properties中所定義的org.springframework.web.servlet.HandlerAdapter的內(nèi)容來加載缺省的handlerAdapter。?
轉(zhuǎn)載于:https://www.cnblogs.com/luoluoshidafu/p/6854333.html
總結(jié)
以上是生活随笔為你收集整理的spring mvc 关键接口 HandlerMapping HandlerAdapter的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黄山风景区本地人有优惠吗
- 下一篇: [Android编程心得] Camera