HandlerAdapter接口的说明
在SprintMVC中,HandlerAdapter组件是一个handler适配器类,它通过handle方法调用request对应的controller方法来处理请求【HandlerMethod】
1 | /** |
如何获取HandlerAdapter
见DispatcherServlet.getHandlerAdapter
1 | protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException { |
handle方法的执行
调用路径是AbstractHandlerMethodAdapter.handle()–>AbstractHandlerMethodAdapter.handleInternal()–>RequestMappingHandlerAdapter.handleInternal。
见RequestMappingHandlerAdapter.handleInternal
1 |
|
controller方法的执行原理,代理模式和反射的应用:invokeHandlerMethod
最终的执行实际上是利用了java的反射包,以及代理模式,关键代码见:invokeHandlerMethod
1 | /** |
invocableMethod.invokeAndHandle(webRequest, mavContainer);
1 | public void invokeAndHandle(ServletWebRequest webRequest, ModelAndViewContainer mavContainer, |
invokeForRequest方法
1 |
|