1、技術(shù)基礎(chǔ)
在閱讀源碼之前,我們要有一定程度的技術(shù)基礎(chǔ)的支持。
假如你從來都沒有學過Java,也沒有其它編程語言的基礎(chǔ),上來就啃《CoreJava》,那樣是很難有收獲的,尤其是《深入Java虛擬機》這類書,或許別人覺得好,但是未必適合現(xiàn)在的你。
比如設(shè)計模式,許多Java源碼當中都會涉及到。再比如閱讀Spring源碼的時候,勢必要先對IOC,AOP,Java動態(tài)代理等知識點有所了解。
2、強烈的求知欲
強烈的求知欲是閱讀源碼的核心動力!
大多數(shù)程序員的學習態(tài)度分為如下幾個層次:
完成自己的項目就可以了,遇到不懂的地方就百度一下。
不僅做好項目,還會去閱讀一些和項目有關(guān)的書籍。
除了閱讀和項目相關(guān)的書籍之外,還會閱讀一些IT行業(yè)相關(guān)的書籍。
平時會經(jīng)常逛逛GitHub,找一些開源項目看看。
閱讀基礎(chǔ)框架、J2EE規(guī)范、源碼。
大多數(shù)程序員的層次都是在第一層,到第五層的人就需要有強烈的求知欲了。
3、足夠的耐心
通過閱讀源碼我們可以學習大佬的設(shè)計思路,技巧。還可以把我們一些零碎的知識點整合起來,從而融會貫通。總之閱讀源碼的好處多多,想必大家也清楚。
但是真的把那么龐大復雜的代碼放到你的眼前時,肯定會在閱讀的過程中卡住,就如同陷入了一個巨大的迷宮,如果想要在這個巨大的迷宮中找到一條出路,那就需要把整個迷宮的整體結(jié)構(gòu)弄清楚,比如:API結(jié)構(gòu)、框架的設(shè)計圖。而且還有理解它的核心思想,確實很不容易。
剛開始閱讀源碼的時候肯定會很痛苦,所以,沒有足夠的耐心是萬萬不行的。
如何讀Java源碼
團長也是經(jīng)歷過閱讀源碼種種痛苦的人,算是有一些成功的經(jīng)驗吧,今天來給大家分享一下。
如果你已經(jīng)有了一年左右的Java開發(fā)經(jīng)驗的話,那么你就有閱讀Java源碼的技術(shù)基礎(chǔ)了。
1、建議從JDK源碼開始讀起,這個直接和eclipse集成,不需要任何配置。
可以從JDK的工具包開始,也就是我們學的《數(shù)據(jù)結(jié)構(gòu)和算法》Java版,如List接口和ArrayList、linkedList實現(xiàn),HashMap和TreeMap等。這些數(shù)據(jù)結(jié)構(gòu)里也涉及到排序等算法,一舉兩得。
面試時,考官總喜歡問ArrayList和Vector的區(qū)別,你花10分鐘讀讀源碼,估計一輩子都忘不了。
然后是core包,也就是String、StringBuffer等。如果你有一定的JavaIO基礎(chǔ),那么不妨讀讀FileReader等類。
建議大家看看《JavaInANutshell》,里面有整個JavaIO的架構(gòu)圖。JavaIO類庫,如果不理解其各接口和繼承關(guān)系,則閱讀始終是一頭霧水。
JavaIO包,我認為是對繼承和接口運用得最優(yōu)雅的案例。如果你將來做架構(gòu)師,你一定會經(jīng)常和它打交道,如項目中部署和配置相關(guān)的核心類開發(fā)。
讀這些源碼時,只需要讀懂一些核心類即可,如和ArrayList類似的二三十個類,對于每一個類,也不一定要每個方法都讀懂。像String有些方法已經(jīng)到虛擬機層了(native方法),如hashCode方法。
當然,如果有興趣,可以對照看看JRockit的源碼,同一套API,兩種實現(xiàn),很有意思的。
如果你再想鉆的話,不妨看看針對虛擬機的那套代碼,如SystemClassLoader的原理,它不在JDK包里,JDK是基于它的。JDK的源碼Zip包只有10來M,它像是有50來M,Sun公司有下載的,不過很隱秘。我曾經(jīng)為自己找到、讀過它很興奮了一陣。
2、JavaWeb項目源碼閱讀
步驟:表結(jié)構(gòu)→web.xml→mvc→db→springioc→log→代碼
?、傧攘私忭椖繑?shù)據(jù)庫的表結(jié)構(gòu),這個方面是最容易忘記的,有時候我們只顧著看每一個方法是怎么進行的,卻沒有去了解數(shù)據(jù)庫之間的主外鍵關(guān)聯(lián)。其實如果先了解數(shù)據(jù)庫表結(jié)構(gòu),再去看一個方法的實現(xiàn)會更加容易。
②然后需要過一遍web.xml,知道項目中用到了什么攔截器,監(jiān)聽器,過濾器,擁有哪些配置文件。如果是攔截器,一般負責過濾請求,進行AOP等;如果是監(jiān)聽器,可能是定時任務,初始化任務;配置文件有如使用了spring后的讀取mvc相關(guān),db相關(guān),service相關(guān),aop相關(guān)的文件。
?、鄄榭磾r截器,監(jiān)聽器代碼,知道攔截了什么請求,這個類完成了怎樣的工作。有的人就是因為缺少了這一步,自己寫了一個action,配置文件也沒有寫錯,但是卻怎么調(diào)試也無法進入這個action,直到別人告訴他,請求被攔截了。
④接下來,看配置文件,首先一定是mvc相關(guān)的,如springmvc中,要請求哪些請求是靜態(tài)資源,使用了哪些view策略,controller注解放在哪個包下等。然后是db相關(guān)配置文件,看使用了什么數(shù)據(jù)庫,使用了什么orm框架,是否開啟了二級緩存,使用哪種產(chǎn)品作為二級緩存,事務管理的處理,需要掃描的實體類放在什么位置。最后是spring核心的ioc功能相關(guān)的配置文件,知道接口與具體類的注入大致是怎樣的。當然還有一些如apectj等的配置文件,也是在這個步驟中完成。
?、輑og相關(guān)文件,日志的各個級別是如何處理的,在哪些地方使用了log記錄日志。
?、迯纳厦鎺c后知道了整個開源項目的整體框架,閱讀每個方法就不再那么難了。
?、弋斎蝗绻许椖颗涮椎拈_發(fā)文檔也是要閱讀的。
3、Java框架源碼閱讀
當然了,就是Spring、MyBatis這類框架。
在讀Spring源碼前,一定要先看看《J2EEDesignandDevelopment》這本書,它是Spring的設(shè)計思路。注意,不是中文版,中文版完全被糟蹋了。
想要閱讀MyBatis的源碼就要先了解它的一些概念,否則云里來霧里去的什么也不懂。有很多人會選擇去買一些書籍來幫助閱讀,當然這是可取的。那么如果不想的話,就可以去官網(wǎng)查看它的介紹,團長也是按照官網(wǎng)上面的介紹來進行源碼閱讀的。團長認為MyBatis的亮點就是管理SQL語句。
總結(jié)
沒有人一開始就可以看得懂那些源碼,我們都是從0開始的,而且沒有什么捷徑可尋,無非就是看我們誰愿意花時間去研究,誰的求知欲更強烈,誰更有耐心。
閱讀源碼的過程中我們的能力肯定會提升,可以從中學到很多東西,在我們做項目的時候就會體現(xiàn)出來了,的確會比以前順手很多。
以上就是長沙中公優(yōu)就業(yè)java培訓機構(gòu)小編介紹的“架構(gòu)師教你如何閱讀Java源碼!”的內(nèi)容,希望對大家有幫助,更多java最新資訊請繼續(xù)關(guān)注長沙中公優(yōu)就業(yè)java培訓機構(gòu)官網(wǎng),每天會有精彩內(nèi)容分享與你。