介绍配置类Parameters及其伴生对象的实现。
 
参考链接:
 
 
 
1. Parameters
 
Parameters是View的子类。实现了View中的find方法,但又把find方法代理给抽象方法chain。所以真实的查找逻辑还是要在Parameters的子类中实现。
 
chain方法代表的是一个链式查找逻辑,签名如下:
其中:
a. pname为要查找的配置项;
b. site为当前要查找的视图;
c. tail为下一个要查找的视图;
 
 
2. EmptyParameters
 
 
EmptyParameters中没有配置项,所以直接在下一个视图中查找:tail.find(pname, site)
 
其创建使用Parameters伴生对象进行创建:
 
 
3. PartialParameters
 
 
PartialParameters包含一个类型为函数的成员f,其类型为:(View, View, View) => PartialFunction[Any,Any]
a. 接收三个类型为View的参数;
b. 返回一个类型为PartialFunction[Any,Any]的函数;
 
PartialParameters的查找逻辑如下:
a. 根据当前的上下文,生成一个匹配函数g;
b. g是一个部分(partial)匹配函数,先检查这个函数是否针对查找key(pname)有匹配项。如果有,则执行匹配找到匹配项并返回;如果没有匹配项,则使用下一个视图(tail)进行查找。
 
 
4. MapParameters
 
 
MapParameters的查找逻辑如下:
a. 在映射表map中查找key(pname)对应的值;
b. 如果存在,则返回配置值;如果不存在,则使用下一个视图(tail)进行查找;
 
 
5. ChainParameters
 
 
ChainParameters本身不能返回配置值,只是一个从x到y的链接。先到x中查找,而后到y中查找。
 
 
6. Config
 
 
Config本身只是一个包装类,是Parameter p的包装,直接调用p.chain进行查找。
 
它也包含一个传入参数f的构造方法,自动使用f构造一个Parameter包装在Config中。这样外部只需要使用Config即可,而不需要在使用Parameter伴生对象的工厂方法。
 
如下即是使用Config的第二个(secondary)构造方法:
 
 
7. 总结
 
查找配置项有两种方法:
a. 动态匹配查找,使用PartialParameters,因为他是一个私有类,所以外部只能使用Config类的第二个构造方法;
b. 静态映射表查找,使用MapParameters,在Rocket中没有使用。
 
ChainParameters只是用于构造链式视图结构,而不包含实际的配置项。Parameters类的++方法把两个视图组合成一个ChainParameters:
 
Config类也继承了这个方法:
 
所以外部只需要使用Config类即可。
 
 

Rocket - config - Parameters的更多相关文章

  1. Rocket - config - implicit Parameters

    https://mp.weixin.qq.com/s/OH_Z1gdSUpfgM-tjx0OlrA   追溯配置信息的源头.   0. HasRocketCoreParameters   ​​ Has ...

  2. Rocket - config - Keys & Params

    https://mp.weixin.qq.com/s/Y42EWrO7IoHRD_yHD4iRLA   介绍配置项.配置值以及他们的使用方式.   参考链接: https://docs.qq.com/ ...

  3. Rocket - config - Configs

    https://mp.weixin.qq.com/s/z2gUYuYQAHQCa_5HZcBszw   介绍各个配置项的组织方式.   参考链接: https://docs.qq.com/sheet/ ...

  4. Rocket - config - DefaultConfig

    https://mp.weixin.qq.com/s/zWW00D0fb8h7_TotGD9YoQ   介绍DefaultConfig类的组成.     1. DefaultConfig   Defa ...

  5. Rocket - interrupts - Parameters

    https://mp.weixin.qq.com/s/eD1_hG0n8W2Wodk25N5KnA 简单介绍interrupts相关的Parameters. 1. IntRange 定义一个中断号区间 ...

  6. Rocket - tilelink - Parameters

    https://mp.weixin.qq.com/s/1I6DcONr0Mg7xiX8F1C7SQ   简单介绍TileLink相关的参数实现(具体问题暂时不展开,后续用到时再做分析).   ​​   ...

  7. Rocket - config - View

    https://mp.weixin.qq.com/s/b5o3s2DgqOz3-iK8FqPeLQ   介绍配置相关的基础类及其继承关系.   参考链接: https://github.com/fre ...

  8. mwc config.h 中文注释

    #ifndef CONFIG_H_ #define CONFIG_H_ /*************************************************************** ...

  9. kafka config

    Config parameters that influence the log retention time. log.roll.hours  # how long to produce a new ...

随机推荐

  1. 201771010113 李婷华 《面向对象程序设计(Java)》第十六周总结

    一.理论知识部分 1.程序是一段静态的代码,它应用程序执行蓝 是一段静态的代码,它应用程序执行蓝 是一段静态的代码,它应用程序执行蓝本. 2.进程是程序的一次动态执行,它对应了从代码加载.执行至执行完 ...

  2. 【HBase】带你了解一哈HBase的各种预分区

    目录 简单了解 概述 设置预分区 一.手动指定预分区 二.使用16进制算法生成预分区 三.将分区规则写在文本文件中 四.使用JavaAPI进行预分区 简单了解 概述 由上图可以看出,每一个表都有属于自 ...

  3. 【Kafka】配置文件说明

    目录 server.properties producer.properties consumer.properties server.properties # broker的全局唯一编号,不能重复 ...

  4. SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter

    SpringBoot解析Json格式数据 @ResponseBody 注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化 1.创建C ...

  5. 【跟我一起读 linux 源码 01】boot

    计算机启动流程在我的上一个学习计划<自制操作系统>系列中,已经从完全不知道,过渡到了现在的了如指掌了,虽然有些夸张,但整个大体流程已经像过电影一样在我脑海里了,所以在看 linux 源码的 ...

  6. equals方法和 == 的使用

    equals方法的使用 equals方法 源码展示: public boolean equals(Object obj) { return (this == obj); } 解析: equals方法默 ...

  7. mysql批量导入删除

    批量导入 <insert id="extractOrderBaseHis">INSERT INTO `odr_order_base_his`(`order_base_i ...

  8. LeetCode 31. 下一个排列 | Python

    31. 下一个排列 题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改, ...

  9. POJ1321棋盘问题(DFS)

    Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...

  10. 百度智能云平台调用食物识别api Java实现

    纪录一下我小学期2天花了20小时写的菜品识别java程序. 1.2. 百度智能云简介 1.2.1 百度图像识别服务 百度图像识别服务,基于深度学习及大规模图像训练,准确识别图片中的物体类别.位置.置信 ...