1、 照着抄同学的一个小练手的时候,看到他的代码里自定义异常类有个奇怪的 final long,问了他:原来异常类型还要带编号的。。。顺便百度了一下,然后还看到 实现 Serializable 的 应该有个 serialVersionUID 是为了增强版本迭代的鲁棒性,学到了学到了。
2、同学的小练手被我匆匆抄了一遍,感觉,web肯定是还不太熟练的。主要是后面要把 timetable5.0 里面的知识吃下来就好了,哎,昨天玩了一天手机,亚历山大。我想要一天有48小时给我,我枯了。
1、继承自 Collector 类 ,Collector类是各类具体监控器(如Gauge、Counter)的父类,
2、有两个私有的静态内部类 Rule 和 Config。
3、JmxMBeanPropertyCache :该开源项目自己的类,用于存了一个 mBean 的mapping。 mBean 的 objectNames to key property lists。 主要目的是减少当我们找不到 mBeans 时调用 PROPERTY_PATTERN 的频率。
1、JmxCollector 的构造方法:
2、两个 reloadConfig 方法:
3、 static String toSnakeAndLowerCase(String attrName)
static String toSnakeAndLowerCase(String attrName) {
if (attrName == null || attrName.isEmpty()) {
return attrName;
}
// 取出首位
char firstChar = attrName.subSequence(0, 1).charAt(0);
// 字符是大写的或者下划线 则 为 true
boolean prevCharIsUpperCaseOrUnderscore = Character.isUpperCase(firstChar) || firstChar == '_';
// 新建了一个初始长度是和传入参数登场的StringBuilder,
// 然后append了转成小写的传入参数的首位char
StringBuilder resultBuilder = new StringBuilder(attrName.length()).append(Character.toLowerCase(firstChar));
// 遍历传入 String 除开首位的部分
for (char attrChar : attrName.substring(1).toCharArray()) {
// 获取当前位是不是大写
boolean charIsUpperCase = Character.isUpperCase(attrChar);
if (!prevCharIsUpperCaseOrUnderscore && charIsUpperCase) {
// 进来的条件为 首位(第一次)或 标志位(第二次及后续)
// 不是 大写或下划线 且 当前遍历位为 大写字母 ,
// 则 给结果 append 一个下划线
resultBuilder.append("_");
}
// 当前位转小写 然后 append进来
resultBuilder.append(Character.toLowerCase(attrChar));
// 标志 boolean 赋值为 当前位是否大写 或 当前位是 下划线
prevCharIsUpperCaseOrUnderscore = charIsUpperCase || attrChar == '_';
}
// StringBuilder 转 String
return resultBuilder.toString();
}
4、static String safeName(String name) 自带注释:将无效字符转成下划线并合并多个下划线
注意:如果开头是数字的话,会先 append 一个下划线进去
5、private static boolean isLegalCharacter(char input) 当传入的 char 为 : 或 _ 或 26个字母或数字,返回 true
6、一个内部类 Receiver 实现了 JmxScraper.MBeanReceiver 接口 (这个接口是项目里自己声明的)
1、private static final Pattern PROPERTY_PATTERN 这是一个规定好了的 Pattern,已经详尽地初始化完了
2、private final Map
a) 一开始看见这有个 final 关键字还挺疑惑的,加了 final 还怎么用,后来明白了:final 只是不让修改 Map ,但我可以修改 Map 里面的东西。
b) Note: 一个 ObjectName 类型的键, 对应的是一个 完整的 LinkedHashMap, 即一个 map 而非 一个键值对
3、public LinkedHashMap
在这里,我去 jdk官方文档 看了一下 ObjectName 到底是个什么东西
第一行说明: Represents the object name of an MBean, or a pattern that can match the names of several MBeans. Instances of this class are immutable.
问了问同学,去搜了一下javax,然后又草草看了一篇 MBean 的博客。
这个方法下面说实话没看懂返回了个啥,但大概就是用pattern去匹配了些
4、public void onlyKeepMBeans(Set