淺析SpringMVC中的適配器HandlerAdapter
DispatcherServlte的initHandlerAdapters方法根據(jù)配置文件信息把HandlerAdapter注冊(cè)到handlerAdapters(List)中。
如果在配置文件中沒(méi)有配置,默認(rèn)配置會(huì)讀取DispatcherServlte.properties文件,該文件中配置了三種HandlerAdapter:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter。
SimpleControllerHandlerAdapter :繼承Controller方式所使用的適配器 HttpRequestHandlerAdapter :HTTP請(qǐng)求處理器適配器 RequestMappingHandlerAdapter :注解方式(@Controller)的處理器適配器
getHandler方法根據(jù)請(qǐng)求遍歷注冊(cè)到handlerAdapters中的適配器拿到對(duì)應(yīng)的適配器處理。
for (HandlerMapping hm : this.handlerMappings) { HandlerExecutionChain handler = hm.getHandler(request); if (handler != null) { return handler; } }
HandlerAdapter接口有三個(gè)方法:
supports方法:是判斷該適配器是否支持這個(gè)HandlerMethod,就是當(dāng)?shù)玫揭粋€(gè)handler時(shí),該接口子類(lèi)該方法做判斷(就是類(lèi)似handler instanceof Controller的判斷方式),用來(lái)得到適配這個(gè)handler的適配器子類(lèi)。
handle方法:用來(lái)執(zhí)行控制器處理函數(shù),獲取ModelAndView 。就是根據(jù)該適配器調(diào)用規(guī)則執(zhí)行handler方法。
如果正常編寫(xiě)調(diào)用,就需要使用多個(gè)if else判斷instance of
if(handler instanceof HttpRequestHandler){ handle1();//HttpRequestHandler的處理方式 } else if (handler instanceof Controller){ handle2();//Controller的處理方式 } else if (handler instanceof Servlet){ handle3();//Servlet的處理方式 }
這種方法再添加新的處理器實(shí)現(xiàn)方式,就需要修改源碼,新增else添加處理邏輯,不符合對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉原則。使用了HandlerAdapter后,當(dāng)需要新增一種處理器(Controller)時(shí),只需要新增一個(gè)HandlerAdapter即可,判斷邏輯在他的supports方法中,處理邏輯在handle中,不需要修改任何其他代碼。
到此這篇關(guān)于淺析SpringMVC中的適配器HandlerAdapter的文章就介紹到這了,更多相關(guān)SpringMVC適配器HandlerAdapter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot如何切換默認(rèn)的Tomcat容器
這篇文章主要介紹了Springboot如何切換默認(rèn)的Tomcat容器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06win10安裝JDK14.0.2的詳細(xì)安裝過(guò)程
這篇文章主要介紹了win10安裝JDK14.0.2的詳細(xì)安裝過(guò)程的相關(guān)資料,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09java實(shí)現(xiàn)Spring在XML配置java類(lèi)的方法
下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)Spring在XML配置java類(lèi)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11一文詳解如何在SpringMVC的視圖中渲染模型數(shù)據(jù)
SpringMVC是一個(gè)基于Spring框架的Web框架,它提供了一種方便的方式來(lái)處理 HTTP 請(qǐng)求和響應(yīng),在SpringMVC中,視圖是用來(lái)渲染模型數(shù)據(jù)的組件,它們負(fù)責(zé)將模型數(shù)據(jù)轉(zhuǎn)換為HTML、JSON、XML等格式的響應(yīng),在本文中,我們將討論如何在SpringMVC中的視圖中渲染模型數(shù)據(jù)2023-07-07Java ExecutorServic線(xiàn)程池異步實(shí)現(xiàn)流程
這篇文章主要介紹了Java ExecutorServic線(xiàn)程池異步實(shí)現(xiàn)流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12

Java實(shí)現(xiàn)監(jiān)聽(tīng)文件變化的三種方案詳解

JavaWeb實(shí)現(xiàn)郵件發(fā)送功能

基于logback實(shí)現(xiàn)純java版本的SDK組件