- 简介
- 映射器的作用就是解析出来url和handler的关系,并且保存这样的关系,在每次请求到来时,查找这个handler。handler并未有明确的要求,但是从spring原本实现上看,handler主要有对象级别和方法级别两种.
复制代码 {@link HandlerMapping}为高级接口界说,所有的HandlerMapping都是基于它实现的。但是它仅仅只是界说了,怎样通过Request查找对应的HandlerExecutionChain对象,并未界说怎样注册url和handler的关系。
{@link HandlerMapping}有两个实现类,分别是从对象级别以及方法级别上查找url和handler的映射关系,这两个实现类分别是:
- AbstractUrlHandlerMapping:从对象级别界说url和handler的映射关系,它的内部是通过一个map来维护这个关系的。
- AbstractHandlerMethodMapping:从方法级别定义url和handler的映射关系,它的内部是通过一个注册中心来维护这个关系的,即{@link AbstractHandlerMethodMapping.MappingRegistry},并且它支持的是{@link org.springframework.web.bind.annotation.RequestMapping}的注解
复制代码 AbstractUrlHandlerMapping
- 它处理的handler是一个bean,但这个bean又分为实现了特定接口的bean和不指定特定实现的bean
复制代码
- 自己指定url和handler关系映射的,即通过prop指定,其为{@link SimpleUrlHandlerMapping}
复制代码- 通过bean本身去解析bean的url和handler关系的,即{@link AbstractDetectingUrlHandlerMapping}
复制代码 AbstractDetectingUrlHandlerMapping
对于通过bean本身去解析bean的url和handler关系的类,该类有分为两种:
- 第一种是通过bean的名称去解析,而bean的名称就是我们界说bean的时候制定的。即
- {@link BeanNameUrlHandlerMapping}
复制代码 - 第二种则是通过实现了特定接口或者注解的bean去解析的bean,即
- {@link AbstractControllerUrlHandlerMapping}
复制代码 AbstractControllerUrlHandlerMapping
- 该类通过,查找固定实现了{@link Controller}接口或者 {@link org.springframework.stereotype.Controller} 的bean来实现bena的关系映射,他又进一步分为三种查找关系
复制代码
- bean的name是一个url结构的。对应的实现类为{@link ControllerBeanNameHandlerMapping},它与BeanNameUrlHandlerMapping的区别是,他必须实现实现了{@link Controller}接口或者 {@link org.springframework.stereotype.Controller},并且他还支持前缀、后缀适配、过滤适配等。
复制代码- bean的包路径形成url结构的,对应的实现类为{@link ControllerClassNameHandlerMapping},它的作用,就是讲bean所在的包当做url的一部分,进行url匹配。
复制代码- bean上注解了{@link org.springframework.web.bind.annotation.RequestMapping}的,目前该方法即将淘汰,使用AbstractHandlerMethodMapping的进行替换和支持。这个方法与AbstractHandlerMethodMapping的区别之处在于,他解析结果是对象级别的,比如你一个bean中注解了多个requestmapping,它的内部存的是一个requestmapping的url与这个bean的映射关系,而AbstractHandlerMethodMapping则是存了一个requestmapping与这个方法级别的映射关系
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |