介绍DefaultConfig类的组成。
 
 
1. DefaultConfig
 
DefaultConfig是Config的子类。其定义位于system/Config.scala:
 
他直接使用Config的第一个(primary)构造方法。在Intellij IDEA中,按住CTRL点击extends后的Config,可以直接定位到使用的构造方法:
 
PS. 作为对比,找一个使用第二个(secondary)构造方法的子类:
 
在Intellij IDEA中,按住CTRL点击extends后的Config,可以直接定位到使用的构造方法:
注意光标位置的不同。
 
DefaultConfig 由WithNBigCores和BaseConfig连接组成。++使用的是Parameters类中定义的方法,他把两个Parameters对象组合成为一个ChainParameters对象:
 
 
2. WithNBigCores
 
表示大核的个数及每个核的配置。
 
1) 配置项存储在PartialParameters中,需要动态匹配才能获取到;
2) 只包含一个配置项,其key为RocketTilesKey,继承在Field:
3) 配置项的值是一个RocketTileParams链表。我们把最后一行稍微改一下:
把光标定位到_ret上,使用Alt+Enter快捷键看Intellij IDEA有没有操作提示:
Enter键选择“Add type annotation to value definition”:
可以看到返回值类型为Seq[RocketTileParams]。这是一个小技巧。
 
4) 其中使用site(SystemBusKey)获取系统总线的配置值。
 
 
3. BaseConfig
 
其定义形式与DefaultConfig一致,多个Config组合成为一个BaseConfig。
 
 
4. 构造过程
 
整理一下DefaultConfig实例化的过程。
 
new DefaultConfig
1) 首先会调用其父类的构造方法;若要调用其父类的构造方法,则需要为之准备参数:
也就是创建Parameters p, p = new WithNBigCores(1) ++ new BaseConfig
 
2) 分别实例化WithNBigCores和BaseConfig;
 
3) 把WithNBigCores和BaseConfig的实例使用方法++组合到一起;
 
4) 调用Config的构造方法,产生DefaultConfig的实例;
 
最终构造的结果如下图:
其中,BaseConfig中只保留了最前面的两项配置。
 
 
5. 查找过程
 
假设有一个DefaultConfig的实例dftCfgInst,dftCfgInst(RocketTilesKey)的查找过程如下:
 
1) dftCfgInst(RocketTilesKey)调用的是View中的方法:
 
2) View.apply(pname)调用View.apply(pname, this);
 
3) View.apply(pname, this)调用find(pname, site);注意这里的site为this,也就是dftCfgInst对象本身;
 
4) find(pname, site)在Parameters中实现为:
所以调用chain(site, new TerminalView, pname),其中site为dftCfgInst;
 
5) chain(site, new TerminalView, pname)在Config中实现为:
委托给p的chain方法。
 
6) 这里dftCfgInst的p为ChainParameters,其chain方法定义为:
委托给x的chain方法;
 
7) 这里的x为WithNBigCores,是一个Config对象。如前所述,其chain委托给p.chain。这里的p为PartialParameters;
 
8) PartialParameters的实现如下:
在这里可以找到RocketTilesKey,也就是g.isDefaultAt(pname)返回真。
 
整理成表格如下:
 
 

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

  1. Rocket - config - implicit Parameters

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

  2. Rocket - config - Configs

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

  3. Rocket - config - Parameters

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

  4. Rocket - config - Keys & Params

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

  5. Rocket - config - View

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

  6. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

  7. 快速的搭建JFinal的ORM框架示例

    JFinal默认用的是Freemarker作为视图. 所以,打架还是准备好俩个jar包吧! freemarker-2.3.16.jar JFinal-bin-1.5.jar 新建web工程和添加lib ...

  8. 使用c3p0连接池

    首先我们需要知道为什么要使用连接池:因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉,每次新建连接都需要140毫秒左右的时间而C3P0连接池会池化连接,随 ...

  9. Jfinal 入门

    Jfinal 入门 IDE----->IDEA 新建项目 新建web项目 添加maven特性 方便导入jar包,不用一个个导入了 配置pom.xml <dependencies> & ...

随机推荐

  1. Day_10【常用API】扩展案例2_获取输入日期是哪一年的哪一天的星期几

    分析以下需求,并用代码实现 1)已知日期字符串:"2015-10-20",将改日期字符串转换为日期对象 2)将(1)中的日期对象转换为日历类的对象 3)根据日历对象获取改日期是星期 ...

  2. [hdu5373 The shortest problem]模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=5373 思路:按题意来即可. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  3. [hdu5199]统计数据的水题

    题意:统计一个数出现了多少次,统计后删去它所有的出现.思路:乱搞..自己没事写的hash,不过赶脚效率有点低. #pragma comment(linker, "/STACK:1024000 ...

  4. python --字符串学习

    一 转义字符 借用一个特殊的方法表示一系列不方便写出的内容,比如回车键,换行符,退格键 借助反斜杠字符,一旦出现反斜杠,则反斜杠后面一个或者几个字符表示已经不是原来的意思了 在字符串中,一旦出现了斜杠 ...

  5. ES6-10笔记(一)

    大纲 (慕课的图先用着) scope-作用域 作用域是指程序源代码中定义变量的区域,规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript作用域共有两种主要的工作模型--词 ...

  6. 最简单的git 用法

    步骤 在机器上ssh-keygen 然后把id_rsa.pub 复制到csdn 的公钥上去. git clone git@code.csdn.net:aca_jingru/zabbix.git 如果这 ...

  7. webstorm-在不删除硬盘文件的条件下移除项目

    一段时间没用之后会忘记如何在webstorm里移除一个项目,要花很长的时间去找到底如何才能移除,所以特地把它记录下来了,方便下次忘记的时候可以查阅 把鼠标移在你要移除的那个项目上然后按下Delete键 ...

  8. MySQL索引及优化(1)存储引擎和底层数据结构

    在昨天的面试中问到了MySQL索引怎么优化(查询很慢怎么办),回答的很不理想,所以今天来总结几篇关于MySQL索引的知识. 1.什么是索引? 首先我们一定要明确什么是索引?我自己的总结就是索引是一种数 ...

  9. Hexo进阶设置

    部署平台选型 前言 GitHub和Gitee(码云)是国内外比较流行的代码托管平台,现都推出GitHub/Gitee Pages可以存放静态网页代码,因此可以用来搭建自己的博客. 优缺点 平台 优点 ...

  10. 关于mysql的metadata lock

    昨天晚上上线,却发现一个ddl语句长时间没有生效 查processlist, 发现包括ddl语句在内的众多查询提示 “Waiting for table metadata lock” 唯一没有该提示的 ...