{eval=Array;=+count(Array);}
抓住主線,分析源碼首先就是宏觀上知道這個(gè)源碼的目的是什么,例如spring就是實(shí)現(xiàn)了IOC和DI的功能,概念比較抽象,也可以直接去實(shí)踐一下,沒(méi)有spring和有spring寫(xiě)一下創(chuàng)建對(duì)象的代碼有啥不同,加深對(duì)框架的理解,只有清楚了整個(gè)框架帶來(lái)的價(jià)值之后,分析源碼才能避免“不識(shí)廬山真面目” 的尷尬。
區(qū)分jar的邊界與職責(zé),很多框架都是一堆的jar去不斷的集成,我們分析源碼首先要宏觀的去看待整個(gè)框架做了什么事情,然后再分清楚每個(gè)jar對(duì)應(yīng)大概做了什么事情,然后這樣就能在分析源碼的時(shí)候盡量不迷路。
抽象思維,對(duì)于開(kāi)源框架來(lái)說(shuō),其很重要的一個(gè)特性就是要把通用需求給穩(wěn)定化,在此基礎(chǔ)上進(jìn)行迭代,不斷的添加最新的特性,在這個(gè)過(guò)程中保持良好的兼容性與擴(kuò)展性,這就要求對(duì)其他框架采取解耦的方案,保持非入侵的方式。這樣帶來(lái)的代碼上的體現(xiàn)就是處處是接口,處處是抽象類,很多方法都是模板方法。這里的行話,就是不要“寫(xiě)死”。依賴抽象而不是實(shí)現(xiàn),這樣就可以盡量的松耦合,所以有意識(shí)的增強(qiáng)對(duì)于接口和抽象類的理解,所以很多人也認(rèn)為 要比較好的閱讀源碼首先要熟悉經(jīng)典設(shè)計(jì)模式與設(shè)計(jì)原則等面向?qū)ο罄碚摗?/p>
底層代碼能力,這一塊是對(duì)于一些偏底層的一些技術(shù)實(shí)現(xiàn)的熟悉,例如反射,動(dòng)態(tài)代理,字節(jié)碼植入,或則是范型的使用,函數(shù)編程等語(yǔ)法糖的熟悉。當(dāng)然如果能熟悉JUC包的東西,多線程的理解也非常重要。
帶著問(wèn)題看源碼,單純的閱讀的確很容易枯燥,但是我們?cè)谑褂玫倪^(guò)程中,由于前期可能主要關(guān)注在如何快速上手可能網(wǎng)上隨便搜索入門教程就開(kāi)始使用后,滿足了日常工作需求就沒(méi)再深入的動(dòng)力,但是其中某個(gè)特性為什么實(shí)現(xiàn),例如mybatis定義的mapper接口沒(méi)有實(shí)現(xiàn)類,是如何注入到spring容器,帶著這樣的疑問(wèn),我們就很自然的產(chǎn)生了好奇心。
畫(huà)圖,圖像是比文字更容易加強(qiáng)記憶和理解的東西,語(yǔ)言是后天的,但眼睛是天生的,我們應(yīng)該善于利用這點(diǎn),閱讀感覺(jué)有點(diǎn)混亂的時(shí)候就開(kāi)始進(jìn)行思維導(dǎo)圖的整理,流程圖的整理等等,這樣的腦圖是很有價(jià)值的,當(dāng)然也不要因此打斷閱讀的連貫性,而是一個(gè)大的階段整理一下即可,每個(gè)人的邏輯思維強(qiáng)度會(huì)有些不同,可以按需掌握節(jié)奏。
犯困就對(duì)了,剛開(kāi)始看不暈才是不正常的,這東西看個(gè)大概就行,除非你真需要這一塊兒的設(shè)計(jì)模式,否則就算看懂,不到兩天保準(zhǔn)兒忘,建議還是會(huì)用,而不是上來(lái)就研究源碼,而且這東西每版源碼都不一樣看不過(guò)來(lái),如果不是在大廠去研發(fā)新框架就沒(méi)啥必要看源碼
看一天是不可能看明白的,我看spring源碼看了一個(gè)星期才開(kāi)始看明白,堅(jiān)持了一個(gè)多月才看明白容器部分。至于注解部分,我沒(méi)有空過(guò),僅僅分析過(guò)scope注解。注解要看明白,要找到注解的processor,注解本身并沒(méi)有什么內(nèi)容。找到Processor,才能知道注解的真相。
其實(shí)直接看源碼就是比較讓人難以琢磨的,因?yàn)楹芏鄷r(shí)候源碼的底層是計(jì)算機(jī)深層技術(shù),和
表面看到的邏輯是不大一樣的,源碼分析,可以從某一個(gè)技術(shù)點(diǎn)來(lái)看,自己看純理論的說(shuō)明
的話,倒不如看一些圖例分析或者視頻講解來(lái)得更明了一些,只要是大白話一些能給你舉幾
個(gè)現(xiàn)實(shí)的事物比較,就更加形象啦,比如說(shuō)一個(gè)bean實(shí)例的創(chuàng)建過(guò)程,可以看看這篇文章,
https://m.toutiaocdn.com/i6745978831934325260/?app=news_article×tamp=1593417076&use_new_style=1&req_id=202006291551150101300371352404BFFB&group_id=6745978831934325260
看看不同時(shí)期做的具體操作和為什么這樣的做,源碼的底層一般效率都是比較高的,尤其
這種設(shè)計(jì)風(fēng)格,在以后自己的代碼風(fēng)格中可以多多借鑒! 就像通信技術(shù),簡(jiǎn)單地看一個(gè)短連接和長(zhǎng)連接的區(qū)別,以及這樣做的優(yōu)缺點(diǎn),加以分析和比較![呲牙][呲牙][呲牙]
帶著問(wèn)題去看代碼,為了解決問(wèn)題去看代碼,如果不是為了具體的開(kāi)發(fā)目標(biāo),而是為了提高技術(shù)水平,應(yīng)該按教程學(xué)習(xí)或自己開(kāi)發(fā)開(kāi)源軟件。 這類似于學(xué)習(xí)語(yǔ)言,放到 這個(gè)語(yǔ)言的環(huán)境下,經(jīng)過(guò)一段時(shí)間,無(wú)意識(shí)就學(xué)會(huì)了。而想考高分而突擊背單詞,肯定一背就犯困。就比如這個(gè)問(wèn)題,transaction 你看懂后,是要修改transaction 哪部分功能? 到達(dá)什么目的,先把這些想清楚
得有人帶一下,體系太龐大,像一座原始森林,要有總體認(rèn)識(shí),和關(guān)鍵點(diǎn)分析,不然分分鐘迷路,過(guò)了那一關(guān)越看越有意思
10
回答0
回答0
回答0
回答2
回答0
回答0
回答0
回答0
回答0
回答