美文网首页Spring 源码
Spring MVC- HandlerMapping

Spring MVC- HandlerMapping

作者: 红衣落桂花 | 来源:发表于2019-05-19 10:58 被阅读17次

    带着几个问题来了解Handler Mapping.

    1. 什么是HandlerMapping, 它在Spring mvc 的处理流程中充当什么角色?

    2. Spring MVC 自带哪几种类型的HandlerMapping? 这些是针对什么情况设计的?

    3. 怎样自定义HandlerMapping?

    4. HandlerMapping 怎样获取HandlerExecutionChain, 即它的工作流程是什么?

    问题1: 什么是HandlerMapping, 它在Spring mvc 的处理流程中充当什么角色?

    HandlerMapping 用来根据http请求选择合适的controller & Interceptor。从下图中可以看出HM 在Spring MVC 中所处的位置。

    image

    问题2,Spring MVC 自带哪几种类型的HandlerMapping? 这些是针对什么情况设计的?

    Spring MVC 自带4种HM, 他们是:DefaultAnnotationHandlerMapping, SimpleUrlHandlerMapping, BeanNameUrlHandlerMapping, ControllerClassNameHandlerMapping

    如果没有在配置文件中指定 HandlerMapping, 就会使用spring 自带配置文件中的配置信息, 该配置文件是:DispatcherServlet.properties , 该配置文件中还有 theme, adapter 等的默认配置。 代码如下(Spring 版本:4.3.9):

    
    org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
    
    org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
    
    org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
        org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
    
    org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
        org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
    
    

    详细介绍上面的四种HandlerMapping之前, 先说下HandlerMapping 的继承关系。

    image

    SimpleUrlHandlerMapping: 是通过配置mappings的参数,显示的指定url和Controller关联。

    DefaultAnnotationHandlerMapping: 扫描具体的包下使用了@Controller注解的类。这样能实现请求和Controller的关联。(在spring 3.2 版本时被弃用,被RequestMappingHandlerMapping 取代)

    BeanNameUrlHandlerMapping: 是URL就是Controller这个bean的name。需要规范url.

    ControllerClassNameHandlerMapping: 是URL就说Controller这个bean的类名去掉Controller后的String。也需要规范url. (在spring 4.3版本时被弃用, in favor of annotation-driven handler methods)

    问题3. 怎样自定义HandlerMapping, 并使之生效?

    自定义:public class MyHandlerMapping extends AbstractDetectingUrlHandlerMapping, 也可以根据上面的类图根据不同的需求,继承不同的类。

    在配置文件中使扫描路径包含MyHandlerMapping 所在package.

    问题4. HandlerMapping 怎样获取HandlerExecutionChain, 即它的工作流程是什么?

    相关文章

      网友评论

        本文标题:Spring MVC- HandlerMapping

        本文链接:https://www.haomeiwen.com/subject/hpvfzqtx.html