死磕 Hutool 源码系列(零)——为什么要阅读 Hutool 源码?

image

前言

你懂的越多,就会发现不懂的越多

本文是死磕 Hutool 源码系列开篇, 主要叙述一下为什么要阅读 Hutool源码,以及阅读 Hutool源码都有哪些好处。不知道什么是 Hutool?或者说看到「源码」两个字之后你的微表情是下面这样的?

image

我想说:不要慌,往下看就完事了!!!

什么是 Hutool?

一个专门给中国后端程序员使用的小而全的Java 工具类库。 它也仅仅是个工具库。这里引用下官网介绍

image

从官网介绍我们可以提取出该库的核心特点:

  • 小而全的 Java 工具类库
  • 通过静态方法封装,降低 Java 相关 API 的学习成本,提高工作效率
  • 基本上涵盖项目中常见的通用需求,开发时只需要专注于业务,而不需要去关心一些通用工具代码的编写

具体包含如下组件:

image

一开始接触这个项目的时候,初看官网的介绍,就被该简介以及包含的组件勾起了好奇心,而当我看到「Hutool 是如何改变我们的 coding方式」的时候,哈哈哈,内容过于真实,仿佛看到了当初那个在深夜为了某个简单的工具代码徘徊在 Google/百度 搜索引擎前的自己。

用了一段时间之后,更让我心动的是,它几乎涵盖了我们「中国化」需求中的方方面面,毕竟是国人开发的工具库,肯定是尽可能的兼顾到我们国内的需求场景,只要你想得到的工具,它基本都有,这样能大大提高编码的工作效率,真正做到专注业务。

嗯,看到这里,你是不是跃跃欲试,想体验下 Hutool 带给你的编码体验了!

为什么要阅读 Hutool 源码?

对于程序员要不要阅读源码这件事,我一直以来的看法都是但凡对技术有追求,想在技术道路上深耕的话,是一定要去阅读好的开源框架源码的。我不知道大家有没有这么一个感觉:工作一段时间后,代码写得也不少,框架用的也不少,可是心里总觉得哪里不对劲?好像知识都会了? 可是好像又不会?

其实这种感觉我相信大家或多或少都会有,至少对于现阶段的我来讲(目前工作三年时间),这种感觉尤为明显。可能对于刚入行的同学,比较不会有这种感觉,因为刚入行的时候接触的东西其实并不多,对于一些开源工具、代码、大概都只是需要会用即可。可是当你工作一段时间之后,积累了一定的代码量,开源框架、工具用的足够多,基本也都达到了「会用」的水平之后,你可能会慢慢开始出现这种感觉,这种感觉我个人暂且把它定义成 「技术成长阶段的焦虑感」。

那么我们怎么消除这种技术成长给你带来的焦虑感呢? 会有这种焦虑感是因为你的技术水平到达了一个阶段性瓶颈期,也可以说,这是一个「关键时期」,你的内心在对于当前的技术沉淀不满足,有强烈的成长的欲望。那么这个时候就需要找寻一个突破口,哈哈哈,这个就好像超级赛亚人第一次变身的时候一样,需要承受巨大的痛苦,可是变身之后就满满的力量感爆棚。

image

毫无疑问,要突破这个瓶颈期,获得满满的力量感,阅读源码是其中一个最行之有效的途径了。那么这个阶段要阅读什么样的框架源码呢?笔者在思考这个问题的时候,拉取了 DubboMyBatisSpring 源码,尝试细细品尝之。随后的尝试阶段,笔者的心情是下面这样的:

image

后来思考了下,为什么会出现这种情况,原因是像 DubboMyBatis类梯队的开源框架源码一般都具备如下特点:

  • 代码量极高
  • 涉及很多设计模式
  • 涉及到的 JDK 基础知识很广,多线程、反射、注解等高级知识肯定是绕不开的,而这类高级特性恰恰是在我们日常业务开发中使用偏少的,毕竟你懂的,都是进厂拧螺丝,还是 CRUD 居多
  • 基本都是英文注释,对于国人英语水平不高的情况下,阅读难度较高

正是因为这类框架源码的这些特点,也能很好的解释为什么不少同学对于阅读源码都是心生恐惧、望而却步了吧。反观 Hutool源码,它相对来讲有如下特质:

  • 代码量虽说也不少,但毕竟是一个纯工具库,基本上都是某个知识点,某个功能点的模块化代码,比如反射工具类 ReflectUtil、字符串工具类StrUtil,相对来讲耦合度都不高,我们大可分而食之
  • 因为是纯工具类库,大多都是基于 JDK原生 API 的封装,而且覆盖的知识点非常广,我们可以在阅读过程中针对薄弱的知识点做知识复盘
  • 很关键的一点是,他是国人编写的类库,中文注释相当规范、非常清楚,可以大大减轻我们的阅读难度

这里先简单拷贝一个方法直观的感受下,它是这样的:

image

每个方法都有非常详细的中文注释,我们可以很清晰的知道这个方法是干嘛的。 方法中的代码行也有部分注释,对于阅读源码有极高的辅助作用。

说到这里,简单总结下,阅读 Hutool 源码到底有啥好处吧:

  • 系统的巩固 JDK 基础知识,形成知识体系
  • 为阅读 DubboNetty 等第一梯队框架源码打好坚实的基础
  • 提高编码效率,更多的划水时间
  • 打破对于阅读源码的恐惧感

最后一点非常关键,打破对于阅读源码的恐惧感,只要迈出第一步,找到阅读源码的信心,从中获取到满足感,你的源码阅读之路会更加顺畅,人哪有一口气吃成胖纸的嘛,都是先易后难,一步步成长起来的。

呸! 说了这么多,还不就是想上班划水摸鱼?

image

如何阅读?

说完为什么要阅读 Hutool 源码以及有什么好处之后,我们再来谈谈如何阅读。相信阅读到这里的同学对Huootl源码不会觉得有多么高深莫测了吧,其实吧,它真的没多难,还是那句话,不要怂,就是干!!!

image

阅读工具的话我选择直接用 IDEA已经是非常好用了,从 GitHub 拉取代码后打开:

image

从代码结构图可以看出,是一个简单的聚合项目,每个子 Module基本上对应上述表格中的一个组件,我选择从 core这个模块开始阅读,里面包含整个工具库的核心工具代码,到了具体的代码层面,作者很贴心的为每个工具类都写了单元测试类,我们阅读过程中可以直接使用单元测试类来调试源码,直接搜索一下就能看到对应的测试类:

image

对应的测试代码如下:

image

可以直接 debug跑起来就能直入源码调试起来,也是很方便了。

如何形成闭环?

不以输出为目的的学习都是伪学习。为什么会这么说呢?

image

当你在学习某个完全没有接触过的知识或者完成一个棘手的功能需求时,可能会去网上搜索大量的资料,通过这些资料中提取有效的信息,耗时三天三夜,甚至更长的时间,最终完成了这个棘手的功能需求,或者说你对这块知识点有了自己独到的理解。那么如果此时你没有做好文档沉淀归档,形成闭环的话。那么你能确保下次再碰上同样的需求或者类似的需求的时候,你能确保不会像第一次一样耗时三天三夜甚至更长的时间去完成这件事情? 有人会说,我会把第一次搜集的资料收藏起来,等下次遇到的时候再看就行了,兄弟! 你这么想的话就错了,等时间长了,你看那收集的资料会跟看天书一样的,你当初的思考轨迹已经被你遗忘了,记住一点就完事了,收集的资料始终是别人的,不是你的,你只是从中提取了有效信息罢了,你在思考的过程中提取出对你有用的信息,这才是你自己的,请一定要把它记录下来,形成你自己的东西。

又或者是你在阅读某个开源项目源码,你已经反反复复 debug 调试不知道多少日日夜夜,突然打通任督二脉,搞懂了代码的逻辑流程。你应该趁热打铁把你思考的过程写下来,结果固然重要,但是思考的过程更加重要。假设你没有把思考的轨迹记录下来,过段时间你就忘了,有时候思路真的就是稍纵即逝!

不管是生活还是工作还是学习,最重要的习惯就是事无巨细的记录,不管用什么工具都好,把它记下来,珍视那些想法,相信我,它们最终都会回报你!

说了这么多,我打算用博客系列的形式来输出阅读 Hutool 源码的过程,期间碰到某块知识点掌握得不够好的话,还会先巩固下对应的知识,同样是以博客的形式输出。

最后

最后,感谢你读到这里,如果你与笔者有相同的感受,想法一致,那么我们一起来消除这该死的焦虑感吧!!!

感谢 Hutool作者对开源社区的贡献!

参考:

更多原创文章会在公众号第一时间推送,欢迎扫码关注 张少林同学

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269