Spring MVC源码浅析(HandlerMapping和HandlerAdapter)

对于访问方式的配置就是,一个url路径和一个函数配对,你访问这个url,就会直接调用这个函数,简单明了。对于java的面向对象来说,就要分两步走。第一步首先要找到是哪个对象,即handler,本工程的handler则是HomeAction对象。第二步要找到访问的函数,即HomeAction的handleRequest方法。所以就出现了两个源码接口 HandlerMapping和HandlerAdapter,前者负责第一步,后者负责第二步。

HandlerMapping接口的实现 :

  1. BeanNameUrlHandlerMapping :通过对比url和bean的name找到对应的对象
  2. SimpleUrlHandlerMapping :也是直接配置url和对应bean,比BeanNameUrlHandlerMapping功能更多
  3. DefaultAnnotationHandlerMapping : 主要是针对注解配置@RequestMapping的,已过时
  4. RequestMappingHandlerMapping :取代了上面一个
  5. ControllerClassNameHandlerMapping:比较少用

HandlerAdapter 接口实现:

  1. HttpRequestHandlerAdapter : 要求handler实现HttpRequestHandler接口,该接口的方法为 void handleRequest(HttpServletRequest request, HttpServletResponse response)也就是 handler必须有一个handleRequest方法
  2. SimpleControllerHandlerAdapter:要求handler实现Controller接口,该接口的方法为ModelAndView
  3. AnnotationMethodHandlerAdapter :和上面的DefaultAnnotationHandlerMapping配对使用的,也已过时
  4. RequestMappingHandlerAdapter : 和上面的RequestMappingHandlerMapping配对使用,针对@RequestMapping

先简单的说下Hello案例工程的流程,访问http://localhost:8080/Hello/hello.do首先由DispatcherServlet进行转发,通过BeanNameUrlHandlerMapping(含有 /hello.do->Hello的配置),找到了Hello,然后再拿Hello和每个adapter进行适配,由于Hello实现了Controller接口,所以最终会有SimpleControllerHandlerAdapter来完成对Hello的handleRequest方法的调度。然后就顺利的执行了我们想要的方法。

    原文作者:Spring MVC
    原文地址: https://blog.csdn.net/Get_More/article/details/75205622
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞