淺析SpringMVC中的適配器HandlerAdapter

DispatcherServlte的initHandlerAdapters方法根據配置文件信息把HandlerAdapter註冊到handlerAdapters(List)中。

如果在配置文件中沒有配置,默認配置會讀取DispatcherServlte.properties文件,該文件中配置瞭三種HandlerAdapter:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter。

SimpleControllerHandlerAdapter :繼承Controller方式所使用的適配器
HttpRequestHandlerAdapter   :HTTP請求處理器適配器
RequestMappingHandlerAdapter  :註解方式(@Controller)的處理器適配器

getHandler方法根據請求遍歷註冊到handlerAdapters中的適配器拿到對應的適配器處理。

for (HandlerMapping hm : this.handlerMappings) {
		HandlerExecutionChain handler = hm.getHandler(request);
		if (handler != null) {
		  return handler;
		}
}

HandlerAdapter接口有三個方法:

在這裡插入圖片描述

supports方法:是判斷該適配器是否支持這個HandlerMethod,就是當得到一個handler時,該接口子類該方法做判斷(就是類似handler instanceof Controller的判斷方式),用來得到適配這個handler的適配器子類。
handle方法:用來執行控制器處理函數,獲取ModelAndView 。就是根據該適配器調用規則執行handler方法。

如果正常編寫調用,就需要使用多個if else判斷instance of

if(handler instanceof HttpRequestHandler){
 handle1();//HttpRequestHandler的處理方式
} else if (handler instanceof Controller){
 handle2();//Controller的處理方式
} else if (handler instanceof Servlet){
 handle3();//Servlet的處理方式
}

這種方法再添加新的處理器實現方式,就需要修改源碼,新增else添加處理邏輯,不符合對擴展開放,對修改關閉原則。使用瞭HandlerAdapter後,當需要新增一種處理器(Controller)時,隻需要新增一個HandlerAdapter即可,判斷邏輯在他的supports方法中,處理邏輯在handle中,不需要修改任何其他代碼。

到此這篇關於淺析SpringMVC中的適配器HandlerAdapter的文章就介紹到這瞭,更多相關SpringMVC適配器HandlerAdapter內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: