點擊右上角【關注】發哥微課堂頭條號,get更多相關技能~
0x00:介紹
處理器適配器 HandlerAdapter:作用是根據映射器找到的處理器 Handler 信息,按照特定的規則去執行相關的處理器 Handler。
其配置方式有兩種,一種是基於 xml 的資源配置,也就是非註解的配置方式。另外一種就是基於 Annotation 註解的配置。其註解在代碼中做上特殊標記,這些標記就可以編譯、類加載、運行時被讀取,然後去執行相應的處理。
0x01:非註解處理器適配器
1,第一個是 SimpleControllerHandlerAdapter,翻譯過來就是簡單的控制器處理器適配器,它支持所有實現了 Controller 接口的 Handler 控制器,如果開發中編寫了實現 Controller 接口的控制器,則 SimpleControllerHandlerAdapter 適配器就會去執行 Controller 的具體方法。其配置示例如下:
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
2,第二個是 HttpRequestHandlerAdapter,翻譯過來就是 http 請求處理器適配器,它要求編寫的 Handler 需要實現 HttpRequestHandler 接口。使用這種 Handler 的開發方式,方便開發者獲取 request 的相關 http 請求信息,以及設置返回對象 response 的一些參數。其配置示例如下:
class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
然後在之前的處理器映射器配置中添加這個 Handler 的 url 映射信息,其示例代碼如下:
testController1
testController2
處理器映射器就是根據 url 來查找 Handler,處理器適配器就是按照它要求的規則去執行 Handler,但是一個 Handler 類中只能編寫一個方法,這個弊端就可以通過註解的方式來解決。
0x02:註解處理器適配器
註解處理器適配器,只需要在指定的地方聲明一些註解信息即可。在 spring3.1 之後,springmvc 新的基於註解的適配器默認是 RequestMappingHandlerAdapter,它位於 springmvc 核心 jar 包 org.springframework.web.servlet.mvc.method.annotation
包下。
其第一種方式是在 springmvc.xml 中聲明 bean 和實現方式即可,示例代碼如下:
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
第二種方式是使用
當我們使用了其註解方式後,就無需在 xml 配置中配置其它任何信息了,而只需要在作為 Handler 處理器的 Java 類中去添加相應的註解即可,示例代碼框架如下:
//使用Controller來標識它是一個控制器
@Controller
public class TestControllerTest{
@RequestMapping("/testurl")
public ModelAndView testurl() throws Exception{
//邏輯代碼
}
}
在以上代碼中 @Controller 是註解信息,表示該類是一個控制器類,可以被註解的處理器適配器找到,而 TestControllerTest 類中的 testurl 方法上有一個 @RequestMapping 註解信息,作用是指定一個 url 與該方法綁定。
這時為了讓註解的處理器映射器能找到 Handler 控制器,需要在 springmvc.xml 做下配置,方式有兩種:
1,在 springmcv.xml 中聲明 bean 信息,示例代碼如下:
class="com.fageweiketang.controller.TestController">
第二種是掃描配置,對某一個包下的所有類進行掃描,找出所有使用 @Controller 註解的 Handler 控制器類,示例代碼如下:
可以發現,上面這段和之前的處理器映射器一樣,其配置通用。
0x03:總結
SpringMVC 中處理器映射器 HandlerMapping 根據配置找到相應的 Handler,返回給前端控制器 DispatcherServlet,前端控制器再傳給處理器適配器讓它進行處理,處理器適配器會去找到對應的 Handler 去處理,處理後則就會返回一個 ModleAndView 對象。
其配置方式有兩種,一個是非註解方式配置,也就是基於 xml 配置文件。第二個就是註解配置,在類中做相應的註解即可。
閱讀更多 發哥微課堂 的文章