前言
你懂的越多,就会发现不懂的越多
本文是死磕 Hutool
源码系列开篇, 主要叙述一下为什么要阅读 Hutool
源码,以及阅读 Hutool
源码都有哪些好处。不知道什么是 Hutool
?或者说看到「源码」两个字之后你的微表情是下面这样的?
我想说:不要慌,往下看就完事了!!!
什么是 Hutool?
一个专门给中国后端程序员使用的小而全的Java
工具类库。 它也仅仅是个工具库。这里引用下官网介绍
从官网介绍我们可以提取出该库的核心特点:
- 小而全的
Java
工具类库 - 通过静态方法封装,降低
Java
相关API
的学习成本,提高工作效率 - 基本上涵盖项目中常见的通用需求,开发时只需要专注于业务,而不需要去关心一些通用工具代码的编写
具体包含如下组件:
一开始接触这个项目的时候,初看官网的介绍,就被该简介以及包含的组件勾起了好奇心,而当我看到「Hutool 是如何改变我们的 coding方式」的时候,哈哈哈,内容过于真实,仿佛看到了当初那个在深夜为了某个简单的工具代码徘徊在 Google/百度 搜索引擎前的自己。
用了一段时间之后,更让我心动的是,它几乎涵盖了我们「中国化」需求中的方方面面,毕竟是国人开发的工具库,肯定是尽可能的兼顾到我们国内的需求场景,只要你想得到的工具,它基本都有,这样能大大提高编码的工作效率,真正做到专注业务。
嗯,看到这里,你是不是跃跃欲试,想体验下 Hutool
带给你的编码体验了!
为什么要阅读 Hutool 源码?
对于程序员要不要阅读源码这件事,我一直以来的看法都是但凡对技术有追求,想在技术道路上深耕的话,是一定要去阅读好的开源框架源码的。我不知道大家有没有这么一个感觉:工作一段时间后,代码写得也不少,框架用的也不少,可是心里总觉得哪里不对劲?好像知识都会了? 可是好像又不会?
其实这种感觉我相信大家或多或少都会有,至少对于现阶段的我来讲(目前工作三年时间),这种感觉尤为明显。可能对于刚入行的同学,比较不会有这种感觉,因为刚入行的时候接触的东西其实并不多,对于一些开源工具、代码、大概都只是需要会用即可。可是当你工作一段时间之后,积累了一定的代码量,开源框架、工具用的足够多,基本也都达到了「会用」的水平之后,你可能会慢慢开始出现这种感觉,这种感觉我个人暂且把它定义成 「技术成长阶段的焦虑感」。
那么我们怎么消除这种技术成长给你带来的焦虑感呢? 会有这种焦虑感是因为你的技术水平到达了一个阶段性瓶颈期,也可以说,这是一个「关键时期」,你的内心在对于当前的技术沉淀不满足,有强烈的成长的欲望。那么这个时候就需要找寻一个突破口,哈哈哈,这个就好像超级赛亚人第一次变身的时候一样,需要承受巨大的痛苦,可是变身之后就满满的力量感爆棚。
毫无疑问,要突破这个瓶颈期,获得满满的力量感,阅读源码是其中一个最行之有效的途径了。那么这个阶段要阅读什么样的框架源码呢?笔者在思考这个问题的时候,拉取了 Dubbo
、MyBatis
、Spring
源码,尝试细细品尝之。随后的尝试阶段,笔者的心情是下面这样的:
后来思考了下,为什么会出现这种情况,原因是像 Dubbo
、MyBatis
类梯队的开源框架源码一般都具备如下特点:
- 代码量极高
- 涉及很多设计模式
- 涉及到的
JDK
基础知识很广,多线程、反射、注解等高级知识肯定是绕不开的,而这类高级特性恰恰是在我们日常业务开发中使用偏少的,毕竟你懂的,都是进厂拧螺丝,还是CRUD
居多 - 基本都是英文注释,对于国人英语水平不高的情况下,阅读难度较高
正是因为这类框架源码的这些特点,也能很好的解释为什么不少同学对于阅读源码都是心生恐惧、望而却步了吧。反观 Hutool
源码,它相对来讲有如下特质:
- 代码量虽说也不少,但毕竟是一个纯工具库,基本上都是某个知识点,某个功能点的模块化代码,比如反射工具类
ReflectUtil
、字符串工具类StrUtil
,相对来讲耦合度都不高,我们大可分而食之 - 因为是纯工具类库,大多都是基于
JDK
原生API
的封装,而且覆盖的知识点非常广,我们可以在阅读过程中针对薄弱的知识点做知识复盘 - 很关键的一点是,他是国人编写的类库,中文注释相当规范、非常清楚,可以大大减轻我们的阅读难度
这里先简单拷贝一个方法直观的感受下,它是这样的:
每个方法都有非常详细的中文注释,我们可以很清晰的知道这个方法是干嘛的。 方法中的代码行也有部分注释,对于阅读源码有极高的辅助作用。
说到这里,简单总结下,阅读 Hutool
源码到底有啥好处吧:
- 系统的巩固
JDK
基础知识,形成知识体系 - 为阅读
Dubbo
、Netty
等第一梯队框架源码打好坚实的基础 - 提高编码效率,更多的划水时间
- 打破对于阅读源码的恐惧感
最后一点非常关键,打破对于阅读源码的恐惧感,只要迈出第一步,找到阅读源码的信心,从中获取到满足感,你的源码阅读之路会更加顺畅,人哪有一口气吃成胖纸的嘛,都是先易后难,一步步成长起来的。
呸! 说了这么多,还不就是想上班划水摸鱼?
如何阅读?
说完为什么要阅读 Hutool
源码以及有什么好处之后,我们再来谈谈如何阅读。相信阅读到这里的同学对Huootl
源码不会觉得有多么高深莫测了吧,其实吧,它真的没多难,还是那句话,不要怂,就是干!!!
阅读工具的话我选择直接用 IDEA
已经是非常好用了,从 GitHub
拉取代码后打开:
从代码结构图可以看出,是一个简单的聚合项目,每个子 Module
基本上对应上述表格中的一个组件,我选择从 core
这个模块开始阅读,里面包含整个工具库的核心工具代码,到了具体的代码层面,作者很贴心的为每个工具类都写了单元测试类,我们阅读过程中可以直接使用单元测试类来调试源码,直接搜索一下就能看到对应的测试类:
对应的测试代码如下:
可以直接 debug
跑起来就能直入源码调试起来,也是很方便了。
如何形成闭环?
不以输出为目的的学习都是伪学习。为什么会这么说呢?
当你在学习某个完全没有接触过的知识或者完成一个棘手的功能需求时,可能会去网上搜索大量的资料,通过这些资料中提取有效的信息,耗时三天三夜,甚至更长的时间,最终完成了这个棘手的功能需求,或者说你对这块知识点有了自己独到的理解。那么如果此时你没有做好文档沉淀归档,形成闭环的话。那么你能确保下次再碰上同样的需求或者类似的需求的时候,你能确保不会像第一次一样耗时三天三夜甚至更长的时间去完成这件事情? 有人会说,我会把第一次搜集的资料收藏起来,等下次遇到的时候再看就行了,兄弟! 你这么想的话就错了,等时间长了,你看那收集的资料会跟看天书一样的,你当初的思考轨迹已经被你遗忘了,记住一点就完事了,收集的资料始终是别人的,不是你的,你只是从中提取了有效信息罢了,你在思考的过程中提取出对你有用的信息,这才是你自己的,请一定要把它记录下来,形成你自己的东西。
又或者是你在阅读某个开源项目源码,你已经反反复复 debug
调试不知道多少日日夜夜,突然打通任督二脉,搞懂了代码的逻辑流程。你应该趁热打铁把你思考的过程写下来,结果固然重要,但是思考的过程更加重要。假设你没有把思考的轨迹记录下来,过段时间你就忘了,有时候思路真的就是稍纵即逝!
不管是生活还是工作还是学习,最重要的习惯就是事无巨细的记录,不管用什么工具都好,把它记下来,珍视那些想法,相信我,它们最终都会回报你!
说了这么多,我打算用博客系列的形式来输出阅读 Hutool
源码的过程,期间碰到某块知识点掌握得不够好的话,还会先巩固下对应的知识,同样是以博客的形式输出。
最后
最后,感谢你读到这里,如果你与笔者有相同的感受,想法一致,那么我们一起来消除这该死的焦虑感吧!!!
感谢 Hutool
作者对开源社区的贡献!
参考:
-
Hutool
官网:https://hutool.cn/ -
github
:https://github.com/looly/hutool/
更多原创文章会在公众号第一时间推送,欢迎扫码关注 张少林同学