0
点赞
收藏
分享

微信扫一扫

SpringMVC适配器类型汇总

上一篇 <<<SpringMVC异步实现方式
下一篇 >>>SpringBoot核心设计理念和核心组件


1.继承Controller方式所使用的适配器:SimpleControllerHandlerAdapter

public class SimpleControllerHandlerAdapter implements HandlerAdapter {
    public boolean supports(Object handler) {
        return (handler instanceof Controller);
    }
    public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        return ((Controller) handler).handleRequest(request, response);
    }
}

2.继承HTTP请求处理器的适配器:HttpRequestHandlerAdapter

public class HttpRequestHandlerAdapter implements HandlerAdapter{
    public boolean supports(Object handler) {
        return (handler instanceof HttpRequestHandler);
    }
    public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        ((HttpRequestHandler) handler).handleRequest(request, response);
        return null;
    }
}

3.注解方式(@Controller)的处理器适配器:RequestMappingHandlerAdapter

public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter{
    protected boolean supportsInternal(HandlerMethod handlerMethod) {
        return true;
    }
    protected ModelAndView handleInternal(HttpServletRequest request,
            HttpServletResponse response, HandlerMethod handlerMethod) throws Exception {
        return invokeHandlerMethod(request, response, handlerMethod);
    }
}
public  abstract class AbstractHandlerMethodAdapter implements HandlerAdapter{
    public final boolean supports(Object handler) {
        return (handler instanceof HandlerMethod && supportsInternal((HandlerMethod) handler));
    }
    public final ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        return handleInternal(request, response, (HandlerMethod) handler);
    }
}

4.继承servlet方式的适配器:SimpleServletHandlerAdapter

public class SimpleServletHandlerAdapter implements HandlerAdapter {
    public boolean supports(Object handler) {
        return (handler instanceof Servlet);
    }
    public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        ((Servlet) handler).service(request, response);
        return null;
    }
}

为什么SpringMVC需要使用适配器调用handler具体方法

if(hanlder instanceof Controller){
 // 执行Controller适配器
}
if(hanlder instanceof  HttpControler){
 // 执行我们的HttpController
}
if(hanlder instanceof  ServletControler){
 // 执行我们的HttpController
}
if(hanlder instanceof  AnnotationControler){
 // 执行我们的AnnotationController
}

推荐阅读:
<<<Spring Servlet相关知识
<<<Spring原理汇总及零碎知识点
<<<Web项目的启动方式汇总
<<<SpringMVC底层无web.xml启动原理分析
<<<SpringMVC运行流程
<<<DispatcherServlet执行原理分析
<<<过滤器与拦截器的区别
<<<SpringMVC拦截器的用法
<<<SpringMVC异步实现方式
<<<@Async注解的失效之谜

举报

相关推荐

0 条评论