前言
你懂的越多,就會(huì)發(fā)現(xiàn)不懂的越多
本文是死磕 Hutool
源碼系列開篇楚昭, 主要敘述一下為什么要閱讀 Hutool
源碼栖袋,以及閱讀 Hutool
源碼都有哪些好處。不知道什么是 Hutool
抚太?或者說看到「源碼」兩個(gè)字之后你的微表情是下面這樣的塘幅?
我想說:不要慌昔案,往下看就完事了!5缦薄踏揣!
什么是 Hutool?
一個(gè)專門給中國后端程序員使用的小而全的Java
工具類庫。 它也僅僅是個(gè)工具庫匾乓。這里引用下官網(wǎng)介紹
從官網(wǎng)介紹我們可以提取出該庫的核心特點(diǎn):
- 小而全的
Java
工具類庫 - 通過靜態(tài)方法封裝捞稿,降低
Java
相關(guān)API
的學(xué)習(xí)成本,提高工作效率 - 基本上涵蓋項(xiàng)目中常見的通用需求拼缝,開發(fā)時(shí)只需要專注于業(yè)務(wù)娱局,而不需要去關(guān)心一些通用工具代碼的編寫
具體包含如下組件:
一開始接觸這個(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í)候一樣汽抚,需要承受巨大的痛苦抓狭,可是變身之后就滿滿的力量感爆棚。
毫無疑問造烁,要突破這個(gè)瓶頸期否过,獲得滿滿的力量感,閱讀源碼是其中一個(gè)最行之有效的途徑了惭蟋。那么這個(gè)階段要閱讀什么樣的框架源碼呢叠纹?筆者在思考這個(gè)問題的時(shí)候,拉取了 Dubbo
敞葛、MyBatis
、Spring
源碼与涡,嘗試細(xì)細(xì)品嘗之惹谐。隨后的嘗試階段持偏,筆者的心情是下面這樣的:
后來思考了下,為什么會(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è)方法直觀的感受下,它是這樣的:
每個(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ì)更加順暢骂束,人哪有一口氣吃成胖紙的嘛,都是先易后難成箫,一步步成長起來的展箱。
呸! 說了這么多伟众,還不就是想上班劃水摸魚析藕?
如何閱讀?
說完為什么要閱讀 Hutool
源碼以及有什么好處之后凳厢,我們?cè)賮碚務(wù)勅绾伍喿x账胧。相信閱讀到這里的同學(xué)對(duì)Huootl
源碼不會(huì)覺得有多么高深莫測了吧,其實(shí)吧先紫,它真的沒多難治泥,還是那句話,不要慫遮精,就是干>蛹小!本冲!
閱讀工具的話我選擇直接用 IDEA
已經(jīng)是非常好用了准脂,從 GitHub
拉取代碼后打開:
從代碼結(jié)構(gòu)圖可以看出,是一個(gè)簡單的聚合項(xiàng)目檬洞,每個(gè)子 Module
基本上對(duì)應(yīng)上述表格中的一個(gè)組件狸膏,我選擇從 core
這個(gè)模塊開始閱讀,里面包含整個(gè)工具庫的核心工具代碼添怔,到了具體的代碼層面湾戳,作者很貼心的為每個(gè)工具類都寫了單元測試類,我們閱讀過程中可以直接使用單元測試類來調(diào)試源碼广料,直接搜索一下就能看到對(duì)應(yīng)的測試類:
對(duì)應(yīng)的測試代碼如下:
可以直接 debug
跑起來就能直入源碼調(diào)試起來砾脑,也是很方便了。
如何形成閉環(huán)艾杏?
不以輸出為目的的學(xué)習(xí)都是偽學(xué)習(xí)韧衣。為什么會(huì)這么說呢?
當(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)熬尺!
參考:
-
Hutool
官網(wǎng):https://hutool.cn/ -
github
:https://github.com/looly/hutool/
更多原創(chuàng)文章會(huì)在公眾號(hào)第一時(shí)間推送,歡迎掃碼關(guān)注 張少林同學(xué)