https://mp.weixin.qq.com/s/z2gUYuYQAHQCa_5HZcBszw

 
介绍各个配置项的组织方式。
 
参考链接:
 
 
1. Parameters的chain方法
 
chain方法用于实现find方法,即查找逻辑:
其使用链式查找的方法,逐个查找各个配置,直到查到所查的key。
 
chain方法所属对象(this)、三个参数,标识着配置链表的不同位置、要查找的key:
a. pname:要查找的Key;
b. site: 整个配置链表;
c. this:当前正在查找的配置项;
d. tail: 配置链表中this配置项之后的配置项;
 
 
2. PartialParameters的chain方法
 
PartialParameters中chain方法的实现如下:
 
其函数成员f使用的参数,就是当前的查找上下文。如下:
a. site: 整个配置链表;
b. this:当前正在查找的配置项;
c. tail: 配置链表中this配置项之后的配置项;
 
 
3. Config的第二个构造方法
 
 
第二个构造方法(secondary constructor),根据传入的参数f,生成一个PartialParameters,然后作为参数调用第一个构造方法(primary constructor)。
 
 
4. 实例
 
 
BaseSubsystemConfig继承自Config类,实例化时调用Config的第二个构造方法。
 
这里的(site, here, up)是形式参数,实际调用时的参数在PartialParameters类中传入,为(site, this, tail)。意义如下:
a. site/site: 整个配置链表;
b. this/here:当前正在查找的配置项;
c. tail/up: 配置链表中this配置项之后的配置项;
 
 
5. 配置项之间的依赖关系
 
某一个配置项可能依赖于其他配置项的值,如BaseSubsystemConfig中的PgLevels依赖于XLen:
 
获取所依赖配置值的方式就是通过site进行查找,也就是在整个配置链表中进行查找。
 
 
6. 配置项之间的覆盖关系
 
1) 因为查找是链式的,所以如果两个配置项含有同一个key,那么排在前面的key的值就会被使用。
 
如DefaultRV32Config:
 
WithRV32中也定义了XLen这个配置项,他排在BaseSubsystemConfig中的XLen之前。所以针对DefaultRV32Config的实例使用site(XLen)时,获取到的是32,而不是64。
 
2) 排在前面的配置项也可以使用排在后面的配置项的值,并对其进行更改。
 
同样如DefaultRV32Config。
 
WithRV32中的配置项RocketTilesKey,使用up(RocketTilesKey, site)查找配置链表中后续配置项中的RocketTilesKey,并对其进行修改。
 
这里是可以查找到的,因为DefaultConfig中也定义了RocketTilesKey这个配置项。
 
 
7. Config的子类们
 
如下链接整理并列出了所有Config的子类:
 

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

  1. Rocket - config - implicit Parameters

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

  2. Rocket - config - Parameters

    https://mp.weixin.qq.com/s/uLEr9gAFaMDIXa8S9xJVTw   介绍配置类Parameters及其伴生对象的实现.   参考链接: https://docs.q ...

  3. Rocket - config - Keys & Params

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

  4. Rocket - config - DefaultConfig

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

  5. Rocket - config - View

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

  6. Spring MVC 的 Java Config ( 非 XML ) 配置方式

    索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: solution/pom.xml web/pom.xml web.xml WebInitializer.java ...

  7. web appbuilder 正式版用yo esri-appbuilder-js:widget生成widget读取不到config解决方案

           对于在webappBuilder正式版中,如果用yo esri-appbuilder-js:widget生成的widget,在写widget的时候widget里面的config.json ...

  8. 关于docker容器是怎样建立新的namespace的。

    最近博客收到了一封交流的私信,感谢您的关注:现在就我理解的docker建立容器时namespace的建立问题做一个 个人的回答: 一,从原理角度来讲: docker创建container,说白了就是l ...

  9. Method Swizzling和AOP(面向切面编程)实践

    Method Swizzling和AOP(面向切面编程)实践 参考: http://www.cocoachina.com/ios/20150120/10959.html 上一篇介绍了 Objectiv ...

随机推荐

  1. Java 四种权限修饰符

    Java 四种权限修饰符访问权限 public protected (default) private 同一个类(我自己) yes yes yes yes 同一包(我邻居) yes yes yes n ...

  2. kafka简介及集群部署

    消息队列概念:(Message queue): “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. “消息队列”是在消息的传输过程中保存消 ...

  3. matlab基础知识总结

  4. 【FPGA篇章一】FPGA工作原理:详细介绍FPGA实现编程逻辑的机理

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 FPGA(Field Programmable Gate Array),即现场可编程逻辑门阵列,它是作为专用集成电路(ASIC)领域中一种半 ...

  5. 使用Pandas读取CSV文件

    使用Pandas读取CSV文件 import pandas as pd csv_data = pd.read_csv('birth_weight.csv') # 读取训练数据 print(csv_da ...

  6. 【Hadoop离线基础总结】HDFS的API操作

    HDFS的API操作 创建maven工程并导入jar包 注意 由于cdh版本的所有的软件涉及版权的问题,所以并没有将所有的jar包托管到maven仓库当中去,而是托管在了CDH自己的服务器上面,所以我 ...

  7. redis crackit入侵事件总结

    今天发现服务器有异常进程/opt/yam/yam,上网搜了搜,是由于redis未授权引起的入侵,查了些资料,这里做下总结. 1. 现象 有以下其一现象就要注意是否被入侵 crontab -l 可以看到 ...

  8. 自动配置的Springboot内junit测试单元不能运行

    解决测试单元不能运行 问题:测试单元的 @Test 前面没有运行图标 解决 IDEA内:File - Setting - Plugins:搜到JUnitGenerator2.0,安装,重启IDEA 光 ...

  9. css多行省略和单行省略

    实现文本省略: <!-- html代码 --> <p class="single">该文的主题思想即对自由境界的向往.朱自清当时虽置身在污浊黑暗的旧中国,但 ...

  10. mysql小白系列_02 mysql源码安装标准化

    问题: 1.为什么数据目录和日志目录需要分开? 2.如何标准化配置多实例?(例如:一台物理主机上部署3306与3307两个实例) 3.详细描述MySQL编译安装的过程(截图安装步骤) 1.为什么数据目 ...