死磕 Hutool 源碼系列(零)——為什么要閱讀 Hutool 源碼席函?

image

前言

你懂的越多,就會(huì)發(fā)現(xiàn)不懂的越多

本文是死磕 Hutool 源碼系列開篇楚昭, 主要敘述一下為什么要閱讀 Hutool源碼栖袋,以及閱讀 Hutool源碼都有哪些好處。不知道什么是 Hutool抚太?或者說看到「源碼」兩個(gè)字之后你的微表情是下面這樣的塘幅?

image

我想說:不要慌昔案,往下看就完事了!5缦薄踏揣!

什么是 Hutool?

一個(gè)專門給中國后端程序員使用的小而全的Java 工具類庫。 它也僅僅是個(gè)工具庫匾乓。這里引用下官網(wǎng)介紹

image

從官網(wǎng)介紹我們可以提取出該庫的核心特點(diǎn):

  • 小而全的 Java 工具類庫
  • 通過靜態(tài)方法封裝捞稿,降低 Java 相關(guān) API 的學(xué)習(xí)成本,提高工作效率
  • 基本上涵蓋項(xiàng)目中常見的通用需求拼缝,開發(fā)時(shí)只需要專注于業(yè)務(wù)娱局,而不需要去關(guān)心一些通用工具代碼的編寫

具體包含如下組件:

image

一開始接觸這個(gè)項(xiàng)目的時(shí)候,初看官網(wǎng)的介紹咧七,就被該簡介以及包含的組件勾起了好奇心衰齐,而當(dāng)我看到「Hutool 是如何改變我們的 coding方式」的時(shí)候,哈哈哈继阻,內(nèi)容過于真實(shí)耻涛,仿佛看到了當(dāng)初那個(gè)在深夜為了某個(gè)簡單的工具代碼徘徊在 Google/百度 搜索引擎前的自己。

用了一段時(shí)間之后穴翩,更讓我心動(dòng)的是犬第,它幾乎涵蓋了我們「中國化」需求中的方方面面,畢竟是國人開發(fā)的工具庫芒帕,肯定是盡可能的兼顧到我們國內(nèi)的需求場景歉嗓,只要你想得到的工具,它基本都有背蟆,這樣能大大提高編碼的工作效率鉴分,真正做到專注業(yè)務(wù)。

嗯带膀,看到這里志珍,你是不是躍躍欲試,想體驗(yàn)下 Hutool 帶給你的編碼體驗(yàn)了垛叨!

為什么要閱讀 Hutool 源碼伦糯?

對(duì)于程序員要不要閱讀源碼這件事,我一直以來的看法都是但凡對(duì)技術(shù)有追求嗽元,想在技術(shù)道路上深耕的話敛纲,是一定要去閱讀好的開源框架源碼的。我不知道大家有沒有這么一個(gè)感覺:工作一段時(shí)間后剂癌,代碼寫得也不少淤翔,框架用的也不少,可是心里總覺得哪里不對(duì)勁佩谷?好像知識(shí)都會(huì)了? 可是好像又不會(huì)旁壮?

其實(shí)這種感覺我相信大家或多或少都會(huì)有监嗜,至少對(duì)于現(xiàn)階段的我來講(目前工作三年時(shí)間),這種感覺尤為明顯抡谐〔闷妫可能對(duì)于剛?cè)胄械耐瑢W(xué),比較不會(huì)有這種感覺童叠,因?yàn)閯側(cè)胄械臅r(shí)候接觸的東西其實(shí)并不多框喳,對(duì)于一些開源工具、代碼厦坛、大概都只是需要會(huì)用即可五垮。可是當(dāng)你工作一段時(shí)間之后杜秸,積累了一定的代碼量放仗,開源框架、工具用的足夠多撬碟,基本也都達(dá)到了「會(huì)用」的水平之后诞挨,你可能會(huì)慢慢開始出現(xiàn)這種感覺,這種感覺我個(gè)人暫且把它定義成 「技術(shù)成長階段的焦慮感」呢蛤。

那么我們?cè)趺聪@種技術(shù)成長給你帶來的焦慮感呢惶傻? 會(huì)有這種焦慮感是因?yàn)槟愕募夹g(shù)水平到達(dá)了一個(gè)階段性瓶頸期,也可以說其障,這是一個(gè)「關(guān)鍵時(shí)期」银室,你的內(nèi)心在對(duì)于當(dāng)前的技術(shù)沉淀不滿足,有強(qiáng)烈的成長的欲望励翼。那么這個(gè)時(shí)候就需要找尋一個(gè)突破口蜈敢,哈哈哈,這個(gè)就好像超級(jí)賽亞人第一次變身的時(shí)候一樣汽抚,需要承受巨大的痛苦抓狭,可是變身之后就滿滿的力量感爆棚。

image

毫無疑問造烁,要突破這個(gè)瓶頸期否过,獲得滿滿的力量感,閱讀源碼是其中一個(gè)最行之有效的途徑了惭蟋。那么這個(gè)階段要閱讀什么樣的框架源碼呢叠纹?筆者在思考這個(gè)問題的時(shí)候,拉取了 Dubbo敞葛、MyBatisSpring 源碼与涡,嘗試細(xì)細(xì)品嘗之惹谐。隨后的嘗試階段持偏,筆者的心情是下面這樣的:

image

后來思考了下,為什么會(huì)出現(xiàn)這種情況氨肌,原因是像 Dubbo鸿秆、MyBatis類梯隊(duì)的開源框架源碼一般都具備如下特點(diǎn):

  • 代碼量極高
  • 涉及很多設(shè)計(jì)模式
  • 涉及到的 JDK 基礎(chǔ)知識(shí)很廣,多線程怎囚、反射卿叽、注解等高級(jí)知識(shí)肯定是繞不開的,而這類高級(jí)特性恰恰是在我們?nèi)粘I(yè)務(wù)開發(fā)中使用偏少的恳守,畢竟你懂的考婴,都是進(jìn)廠擰螺絲,還是 CRUD 居多
  • 基本都是英文注釋催烘,對(duì)于國人英語水平不高的情況下沥阱,閱讀難度較高

正是因?yàn)檫@類框架源碼的這些特點(diǎn),也能很好的解釋為什么不少同學(xué)對(duì)于閱讀源碼都是心生恐懼伊群、望而卻步了吧考杉。反觀 Hutool源碼,它相對(duì)來講有如下特質(zhì):

  • 代碼量雖說也不少舰始,但畢竟是一個(gè)純工具庫崇棠,基本上都是某個(gè)知識(shí)點(diǎn),某個(gè)功能點(diǎn)的模塊化代碼丸卷,比如反射工具類 ReflectUtil枕稀、字符串工具類StrUtil,相對(duì)來講耦合度都不高及老,我們大可分而食之
  • 因?yàn)槭羌児ぞ哳悗斐槔常蠖喽际腔?JDK原生 API 的封裝,而且覆蓋的知識(shí)點(diǎn)非常廣骄恶,我們可以在閱讀過程中針對(duì)薄弱的知識(shí)點(diǎn)做知識(shí)復(fù)盤
  • 很關(guān)鍵的一點(diǎn)是食铐,他是國人編寫的類庫,中文注釋相當(dāng)規(guī)范僧鲁、非常清楚虐呻,可以大大減輕我們的閱讀難度

這里先簡單拷貝一個(gè)方法直觀的感受下,它是這樣的:

image

每個(gè)方法都有非常詳細(xì)的中文注釋寞秃,我們可以很清晰的知道這個(gè)方法是干嘛的斟叼。 方法中的代碼行也有部分注釋,對(duì)于閱讀源碼有極高的輔助作用春寿。

說到這里朗涩,簡單總結(jié)下,閱讀 Hutool 源碼到底有啥好處吧:

  • 系統(tǒng)的鞏固 JDK 基礎(chǔ)知識(shí)绑改,形成知識(shí)體系
  • 為閱讀 Dubbo谢床、Netty 等第一梯隊(duì)框架源碼打好堅(jiān)實(shí)的基礎(chǔ)
  • 提高編碼效率兄一,更多的劃水時(shí)間
  • 打破對(duì)于閱讀源碼的恐懼感

最后一點(diǎn)非常關(guān)鍵,打破對(duì)于閱讀源碼的恐懼感识腿,只要邁出第一步出革,找到閱讀源碼的信心,從中獲取到滿足感渡讼,你的源碼閱讀之路會(huì)更加順暢骂束,人哪有一口氣吃成胖紙的嘛,都是先易后難成箫,一步步成長起來的展箱。

呸! 說了這么多伟众,還不就是想上班劃水摸魚析藕?

image

如何閱讀?

說完為什么要閱讀 Hutool 源碼以及有什么好處之后凳厢,我們?cè)賮碚務(wù)勅绾伍喿x账胧。相信閱讀到這里的同學(xué)對(duì)Huootl源碼不會(huì)覺得有多么高深莫測了吧,其實(shí)吧先紫,它真的沒多難治泥,還是那句話,不要慫遮精,就是干>蛹小!本冲!

image

閱讀工具的話我選擇直接用 IDEA已經(jīng)是非常好用了准脂,從 GitHub 拉取代碼后打開:

image

從代碼結(jié)構(gòu)圖可以看出,是一個(gè)簡單的聚合項(xiàng)目檬洞,每個(gè)子 Module基本上對(duì)應(yīng)上述表格中的一個(gè)組件狸膏,我選擇從 core這個(gè)模塊開始閱讀,里面包含整個(gè)工具庫的核心工具代碼添怔,到了具體的代碼層面湾戳,作者很貼心的為每個(gè)工具類都寫了單元測試類,我們閱讀過程中可以直接使用單元測試類來調(diào)試源碼广料,直接搜索一下就能看到對(duì)應(yīng)的測試類:

image

對(duì)應(yīng)的測試代碼如下:

image

可以直接 debug跑起來就能直入源碼調(diào)試起來砾脑,也是很方便了。

如何形成閉環(huán)艾杏?

不以輸出為目的的學(xué)習(xí)都是偽學(xué)習(xí)韧衣。為什么會(huì)這么說呢?

image

當(dāng)你在學(xué)習(xí)某個(gè)完全沒有接觸過的知識(shí)或者完成一個(gè)棘手的功能需求時(shí),可能會(huì)去網(wǎng)上搜索大量的資料畅铭,通過這些資料中提取有效的信息萧求,耗時(shí)三天三夜,甚至更長的時(shí)間顶瞒,最終完成了這個(gè)棘手的功能需求,或者說你對(duì)這塊知識(shí)點(diǎn)有了自己獨(dú)到的理解元旬。那么如果此時(shí)你沒有做好文檔沉淀歸檔榴徐,形成閉環(huán)的話。那么你能確保下次再碰上同樣的需求或者類似的需求的時(shí)候匀归,你能確保不會(huì)像第一次一樣耗時(shí)三天三夜甚至更長的時(shí)間去完成這件事情坑资? 有人會(huì)說,我會(huì)把第一次搜集的資料收藏起來穆端,等下次遇到的時(shí)候再看就行了袱贮,兄弟! 你這么想的話就錯(cuò)了体啰,等時(shí)間長了攒巍,你看那收集的資料會(huì)跟看天書一樣的,你當(dāng)初的思考軌跡已經(jīng)被你遺忘了荒勇,記住一點(diǎn)就完事了柒莉,收集的資料始終是別人的,不是你的沽翔,你只是從中提取了有效信息罷了兢孝,你在思考的過程中提取出對(duì)你有用的信息,這才是你自己的仅偎,請(qǐng)一定要把它記錄下來跨蟹,形成你自己的東西。

又或者是你在閱讀某個(gè)開源項(xiàng)目源碼橘沥,你已經(jīng)反反復(fù)復(fù) debug 調(diào)試不知道多少日日夜夜窗轩,突然打通任督二脈,搞懂了代碼的邏輯流程威恼。你應(yīng)該趁熱打鐵把你思考的過程寫下來品姓,結(jié)果固然重要,但是思考的過程更加重要箫措。假設(shè)你沒有把思考的軌跡記錄下來腹备,過段時(shí)間你就忘了,有時(shí)候思路真的就是稍縱即逝斤蔓!

不管是生活還是工作還是學(xué)習(xí)植酥,最重要的習(xí)慣就是事無巨細(xì)的記錄,不管用什么工具都好,把它記下來友驮,珍視那些想法漂羊,相信我,它們最終都會(huì)回報(bào)你卸留!

說了這么多走越,我打算用博客系列的形式來輸出閱讀 Hutool 源碼的過程,期間碰到某塊知識(shí)點(diǎn)掌握得不夠好的話耻瑟,還會(huì)先鞏固下對(duì)應(yīng)的知識(shí)旨指,同樣是以博客的形式輸出。

最后

最后喳整,感謝你讀到這里谆构,如果你與筆者有相同的感受,想法一致框都,那么我們一起來消除這該死的焦慮感吧0崴亍!魏保!

感謝 Hutool作者對(duì)開源社區(qū)的貢獻(xiàn)熬尺!

參考:

更多原創(chuàng)文章會(huì)在公眾號(hào)第一時(shí)間推送,歡迎掃碼關(guān)注 張少林同學(xué)

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市囱淋,隨后出現(xiàn)的幾起案子猪杭,更是在濱河造成了極大的恐慌,老刑警劉巖妥衣,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皂吮,死亡現(xiàn)場離奇詭異,居然都是意外死亡税手,警方通過查閱死者的電腦和手機(jī)蜂筹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芦倒,“玉大人艺挪,你說我怎么就攤上這事”铮” “怎么了麻裳?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長器钟。 經(jīng)常有香客問我津坑,道長,這世上最難降的妖魔是什么傲霸? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任疆瑰,我火速辦了婚禮眉反,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘穆役。我一直安慰自己寸五,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布耿币。 她就那樣靜靜地躺著梳杏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淹接。 梳的紋絲不亂的頭發(fā)上秘狞,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音蹈集,去河邊找鬼。 笑死雇初,一個(gè)胖子當(dāng)著我的面吹牛拢肆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播靖诗,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼郭怪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刊橘?” 一聲冷哼從身側(cè)響起鄙才,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎促绵,沒想到半個(gè)月后攒庵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡败晴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年浓冒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尖坤。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稳懒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慢味,到底是詐尸還是另有隱情场梆,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布纯路,位于F島的核電站或油,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏感昼。R本人自食惡果不足惜选酗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吊圾。 院中可真熱鬧喉钢,春花似錦、人聲如沸柠掂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽上炎。三九已至,卻和暖如春雏搂,著一層夾襖步出監(jiān)牢的瞬間藕施,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工凸郑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裳食,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓芙沥,卻偏偏與公主長得像诲祸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子而昨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359