歡迎光臨我的個(gè)人博客:https://www.jelliclecat.cn/
前言-如何閱讀Spring源碼
想想大概是去年這個(gè)時(shí)候clone的spring-frameword工程,到現(xiàn)在整整一年了,起初功力太弱,實(shí)在是讀不了spring,現(xiàn)在算是功力有所精進(jìn),期間斷斷續(xù)續(xù)也把Spring的工程打開瀏覽過幾次,但是都只是粗略的走讀,一方面剛剛說了,功力不夠,另一方面,也是自己心浮氣躁,沉不下心來,再加上spring代碼層次之復(fù)雜,如果不仔細(xì)分析琢磨,那就更不可能讀懂了。
要說為什么要讀Spring呢,其實(shí)我給的答案比較簡單,就是好奇,想知道它是怎么做的,因?yàn)橐呀?jīng)工作了,所以沒有應(yīng)付面試官這種需求了。當(dāng)然如果抱著功利的心態(tài)去讀也是沒有錯的,因?yàn)樽x源碼這件事本身就可以從中獲取大量的知識,包括比較基礎(chǔ)的語言知識也好,或者是框架設(shè)計(jì)層面的也好,而且讀這些高難度的源碼也能夠提升我們的視野,讓我們不局限在工作的crud + html中,畢竟如果想成為一名優(yōu)秀的工程師甚至是架構(gòu)師,宏觀框架的設(shè)計(jì)能力也是必須有的,而且就目前來說,spring幾乎成為了行業(yè)標(biāo)準(zhǔn),市面上很多其他的框架都是基于spring做的擴(kuò)展,或者至少也做到和spring兼容,比如dubbo等等,更不用說spring cloud這一個(gè)超大社區(qū),里面包含了大量的分布式框架,無一不對spring做了兼容。所以想在java道路上走的更遠(yuǎn),精通spring是繞不開的一個(gè)節(jié)點(diǎn)。
Spring優(yōu)秀嗎?當(dāng)然優(yōu)秀了,曾經(jīng)看到一些對spring的質(zhì)疑,覺得spring有過度設(shè)計(jì)的嫌疑,這點(diǎn)我本人暫時(shí)保留態(tài)度,因?yàn)槲掖a還沒讀完呢,沒有發(fā)言權(quán)。但以一個(gè)社區(qū)的力量,做到現(xiàn)在成為行業(yè)標(biāo)準(zhǔn)(準(zhǔn)標(biāo)準(zhǔn)吧)相比也不是等閑之輩,懷著一些謙卑的態(tài)度去看待的話,我覺得我還是能學(xué)到不少東西的。
前段時(shí)間算是仔細(xì)閱讀了一部分,這里也算是做個(gè)記錄,記錄一下閱讀過程中的一些小小心得,對自己也算是一種監(jiān)督,如果有幸一字半句還能幫助到來訪的人,那也算是我的榮幸。
Spring算是大工程,60W行代碼(包含測試代碼),想要閱讀起來絕對不輕松。怎么入手呢?首先好好掌握java基礎(chǔ)知識,其中反射和自省機(jī)制是重中之重,然后要掌握設(shè)計(jì)模式以及設(shè)計(jì)模式的各種理念和原則,這是整個(gè)Spring的重要脈絡(luò)。如果掌握了這些,那么可以開始閱讀Spring了。
但是讀源碼也有技巧,愣看也不行,得有方法。首先需要從spring-beans這個(gè)包入手,這個(gè)包是spring的核心,如果說spring只能選一個(gè)必看的包那就是這個(gè)了,這個(gè)包中定義了spring的核心邏輯,那就是bean以及factory,里面一切的內(nèi)容都是圍繞著這兩個(gè)概念進(jìn)行的。
看源碼環(huán)境不能少,建議使用IDEA閱讀,具體構(gòu)建步驟不再贅述,github上寫得很明白。從哪入手呢?建議先把所有的Interface看一遍,并仔細(xì)閱讀每個(gè)interface上的注釋,這樣至少會對整體的架構(gòu)和最抽象的設(shè)計(jì)有一個(gè)模糊的印象,并且在閱讀的過程中,自然就能發(fā)現(xiàn)哪些接口是核心接口??赐杲涌谥螅涂梢钥纯匆恍┖诵慕涌诘木唧w實(shí)現(xiàn)了,既要有細(xì)讀,也要有宏觀的理解,還要有Test的調(diào)試。
熟悉Spring的朋友肯定知道,BeanFactory、BeanDefinition、BeanWrapper算的上是這個(gè)包乃至整個(gè)spring的核心接口。我也打算先這幾個(gè)接口,以及如何實(shí)現(xiàn)開始說起。
歡迎光臨我的個(gè)人博客:https://www.jelliclecat.cn/