S03 适配器模式 SpringMVC源码解析

org.springframework.web.servlet.DispatcherServlet

  • 相当于客户端 Test 的角色;
  • DispatcherServlet 是 SpringMVC 中最核心的类,主要做的事情是把请求交由对应的 Controller;
  • 其中最核心的方法是 doDispatch(HttpServletRequest request, HttpServletResponse response);
  • 由于 Controller 有众多实现类,如果每增加一个 Controller 的实现类,在 doDispatch(...) 中都要做类型的判断,那么是违反开闭原则的;
  • 具体解决方案是:SpringMVC中定义了一个适配器接口 HandlerAdapter,每增加一个 Controller 的实现类,就实现一个与其对应的 HandlerAdapter,在HandlerAdapter 的实现类中做 Controller 类型的判断,然后呢 doDispatch(...) 面向 HandlerAdapter 编程,遵守的开闭原则;


    S03 适配器模式 SpringMVC源码解析
    doDispatch().png

org.springframework.web.servlet.mvc.Controller 的众多实现类

  • 相当于被适配者 Adaptee;


    S03 适配器模式 SpringMVC源码解析
    Controller的实现类.png

org.springframework.web.servlet.HandlerAdapter 的众多实现类

  • 相当于具体的适配器角色;


    S03 适配器模式 SpringMVC源码解析
    HandlerAdapter的实现类.png