以下内容基于书:《看透SpringMVC-源代码分析与实践》
基本照搬。。。用于自己查阅备忘。加上外传关键字的是讨论一些SpringMVC的特定类的使用方法,非外传的是对启动流程/请求处理流程,我们可以看作主线剧情。

RequestCondition是一个springMVC的接口,专门用于保存从request提取出的用于匹配handler的条件。
它的继承树如下:

代码如下:

public interface RequestCondition<T> {T combine(T other);T getMatchingCondition(HttpServletRequest request);int compareTo(T other, HttpServletRequest request);
}

可以看到它的抽象实现,AbstractRequestCondition有8个子类,下面介绍下他们

CompositeRequestCondition

它本身不实际做匹配,而是可以存储多个RequestCondition,用的时候遍历它存储的这些RequestCondition进行匹配即可,也就是责任链模式,这种模式在SpringMVC中很常见,类名是CompositeXXX或者XXXComposite的就是。部分代码如下:

private final RequestConditionHolder[] requestConditions;
@Override
public CompositeRequestCondition getMatchingCondition(HttpServletRequest request) {if (isEmpty()) {return this;}RequestConditionHolder[] matchingConditions = new RequestConditionHolder[getLength()];for (int i = 0; i < getLength(); i++) {matchingConditions[i] = this.requestConditions[i].getMatchingCondition(request);if (matchingConditions[i] == null) {return null;}}return new CompositeRequestCondition(matchingConditions);
}

AbstractRequestCondition的其他子类

每个子类表示一种匹配条件,如,PatternsRequestCondition使用url匹配。
RequestMethodsRequestCondition使用RequestMethod做匹配。

RequestMappingInfo

我们在介绍AbstractHandlerMethodMapping1时提到它的泛型默认实现是RequestMappingInfo,
它的内部用七个变量保存了七个RequestCondition,匹配时用他们进行匹配,这也就是@RequestMapping中可以给处理器指定多种匹配方式的原因。

private final PatternsRequestCondition patternsCondition;
private final RequestMethodsRequestCondition methodsCondition;
private final ParamsRequestCondition paramsCondition;
private final HeadersRequestCondition headersCondition;
private final ConsumesRequestCondition consumesCondition;
private final ProducesRequestCondition producesCondition;
private final RequestConditionHolder customConditionHolder;

应用实例

先留空以后写代码测试补上


  1. http://blog.csdn.net/xia4820723/article/details/51418676 SpringMVC源代码学习(四)九大组件上

SpringMVC源代码学习外传(三)RequestCondition相关推荐

  1. SpringMVC源代码学习外传(一)xml命名空间的解析NamespaceHandler

    以下内容基于书:<看透SpringMVC-源代码分析与实践> 基本照搬...用于自己查阅备忘. 加上外传关键字的是讨论一些SpringMVC的特定类的使用方法, 非外传的是对启动流程/请求 ...

  2. SpringMVC源代码学习外传(二)如何在重定向时传递参数FlashMap

    以下内容基于书:<看透SpringMVC-源代码分析与实践> 基本照搬...用于自己查阅备忘. 加上外传关键字的是讨论一些SpringMVC的特定类的使用方法, 非外传的是对启动流程/请求 ...

  3. BT源代码学习心得(三):种子文件的编码方式 -- 转贴自wolfenstein (NeverSayNever)

    BT源代码学习心得(三):种子文件的编码方式 author: wolfenstein BT的作者使用了一种比较简单易懂的编码方式来对设计种子文件.这种编码方式能够很简单得对python中的各种数据类型 ...

  4. SpringMVC源代码学习(一)从HTttpServletBean到DispatcherServlet

    以下内容基于书:<看透SpringMVC-源代码分析与实践>基本照搬...用于自己查阅备忘. 观察DispatcherServlet继承树    做Java web的应该都知道Generi ...

  5. SpringMVC的学习(三)——Controller传递数据

    一.Controller传递数据 有三种实现方案: 第一种:ModelAndView 第二种:Map 第三种:Model接口 ①:ModelAndView public class DemoContr ...

  6. SpringMVC基础学习之Restful风格的简单使用

    前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个SpringM ...

  7. 强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例

    强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例 1. 引言 在这个部分补充之前马尔科夫决策和动态规划部分的代码.在以后的内容我会把相关代码都附到相关内容的后面.本部 ...

  8. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  9. SpringMVC深度探险(三) —— DispatcherServlet与初始化主线

    本文是专栏文章(SpringMVC深度探险)系列的文章之一,博客地址为:http://downpour.iteye.com/blog/1341459. 在上一篇文章中,我们给出了构成SpringMVC ...

最新文章

  1. Jmail的主要参数列表
  2. Bloom Filter 大规模数据处理利器
  3. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
  4. fopen参数mode详解
  5. c语言不被O2优化,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
  6. wsdl文件是怎么生成的_C++ 动态库.dll的生成---超级详细!!!
  7. 项目开发中对使用的第三方库统一进行管理__添加属性表/页
  8. 机器视觉入门资料大全
  9. 环境规划与管理--知识点总结
  10. 东财《组织行为学B》综合作业
  11. c语言模拟洪泛路由算法,[Angular, TypeScript, 路由算法] 模拟IP层路由协议,实现LS算法、洪泛算法、DV算法、路由毒化...
  12. java调用python库pyd_Java怎么调用pyd文件
  13. 2021中国开源优秀人物榜出炉!
  14. python进程和线程大全
  15. el轮播图片image单张图比例缩放及多张图宽度固定高度等比例自适应展示;
  16. 4月21日V反再次来临?
  17. 爱读掌阅java版_爱读掌阅app官方下载-爱读掌阅旧版本 - 超好玩
  18. Linux基础Day02
  19. USB Type-C 协议
  20. 华为p20Android怎么解开,【华为P20】解锁EMUI8.1系统下华为P20的各种玩法新技巧

热门文章

  1. 培训机构微信裂变引流方案,培训机构如何利用微信群裂变引流招生?
  2. 100种思维模型之卡尼曼双系统思维模型-015
  3. matlab官网大纲,系统仿真与Matlab-教学大纲模板(2015版)
  4. 1.1 日本蜡烛图技术之十字线和支撑压力线
  5. c语言处理单色bmp文件,C语言处理单色BMP文件
  6. 奥尔所有java游戏_奥尔-少年侦探JS
  7. 初学C语言:根据输入的身高,求出标准体重。
  8. 全平台最佳密码管理工具大全:支持 Windows、Linux、Mac、Android、iOS 以及企业应用
  9. 什么是混合实体/曲面建模?有什么优势?
  10. 环迅支付打造定制化服务,为智慧教育高效发展加速