如何閱讀Java源碼?且聽阿里P7架構師的分享

閱讀Java源碼的前提條件:

1、技術基礎

在閱讀源碼以前,咱們要有必定程度的技術基礎的支持。html

假如你歷來都沒有學過Java,也沒有其它編程語言的基礎,上來就啃《Core Java》,那樣是很難有收穫的,尤爲是《深刻Java虛擬機》這類書,或許別人以爲好,可是未必適合如今的你。程序員

好比設計模式,許多Java源碼當中都會涉及到。再好比閱讀Spring源碼的時候,勢必要先對IOC,AOP,Java動態代理等知識點有所瞭解。web

2、強烈的求知慾

強烈的求知慾是閱讀源碼的核心動力!面試

大多數程序員的學習態度分爲以下幾個層次:算法

  1. 完成本身的項目就能夠了,遇到不懂的地方就百度一下。
  2. 不只作好項目,還會去閱讀一些和項目有關的書籍。
  3. 除了閱讀和項目相關的書籍以外,還會閱讀一些IT行業相關的書籍。
  4. 平時會常常逛逛GitHub,找一些開源項目看看。
  5. 閱讀基礎框架、J2EE規範、源碼。

大多數程序員的層次都是在第一層,到第五層的人就須要有強烈的求知慾了。spring

3、足夠的耐心

經過閱讀源碼咱們能夠學習大佬的設計思路,技巧。還能夠把咱們一些零碎的知識點整合起來,從而融會貫通。總之閱讀源碼的好處多多,想必你們也清楚。sql

可是真的把那麼龐大複雜的代碼放到你的眼前時,確定會在閱讀的過程當中卡住,就如同陷入了一個巨大的迷宮,若是想要在這個巨大的迷宮中找到一條出路,那就須要把整個迷宮的總體結構弄清楚,好比:API結構、框架的設計圖。並且還有理解它的核心思想,確實很不容易。shell

剛開始閱讀源碼的時候確定會很痛苦,因此,沒有足夠的耐心是萬萬不行的。數據庫

如何讀Java源碼:

團長也是經歷過閱讀源碼種種痛苦的人,算是有一些成功的經驗吧,今天來給你們分享一下。編程

若是你已經有了一年左右的Java開發經驗的話,那麼你就有閱讀Java源碼的技術基礎了。

1、建議從JDK源碼開始讀起,這個直接和eclipse集成,不須要任何配置。

能夠從JDK的工具包開始,也就是咱們學的《數據結構和算法》Java版,如List接口和ArrayList、LinkedList實現,HashMap和TreeMap等。這些數據結構裏也涉及到排序等算法,一箭雙鵰。

面試時,考官總喜歡問ArrayList和Vector的區別,你花10分鐘讀讀源碼,估計一生都忘不了。

而後是core包,也就是String、StringBuffer等。 若是你有必定的Java IO基礎,那麼不妨讀讀FileReader等類。

建議你們看看《Java In A Nutshell》,裏面有整個Java IO的架構圖。Java IO類庫,若是不理解其各接口和繼承關係,則閱讀始終是一頭霧水。

Java IO 包,我認爲是對繼承和接口運用得最優雅的案例。若是你未來作架構師,你必定會常常和它打交道,如項目中部署和配置相關的核心類開發。

讀這些源碼時,只須要讀懂一些核心類便可,如和ArrayList相似的二三十個類,對於每個類,也不必定要每一個方法都讀懂。像String有些方法已經到虛擬機層了(native方法),如hashCode方法。

固然,若是有興趣,能夠對照看看JRockit的源碼,同一套API,兩種實現,頗有意思的。

若是你再想鑽的話,不妨看看針對虛擬機的那套代碼,如System ClassLoader的原理,它不在JDK包裏,JDK是基於它的。JDK的源碼Zip包只有10來M,它像是有50來M,Sun公司有下載的,不過很隱祕。我曾經爲本身找到、讀過它很興奮了一陣。

2、Java Web項目源碼閱讀

步驟:表結構 → web.xml → mvc → db → spring ioc → log→ 代碼

  1. 先了解項目數據庫的表結構,這個方面是最容易忘記的,有時候咱們只顧着看每個方法是怎麼進行的,卻沒有去了解數據庫之間的主外鍵關聯。其實若是先了解數據庫表結構,再去看一個方法的實現會更加容易。
  2. 而後須要過一遍web.xml,知道項目中用到了什麼攔截器,監聽器,過濾器,擁有哪些配置文件。若是是攔截器,通常負責過濾請求,進行AOP等;若是是監聽器,多是定時任務,初始化任務;配置文件有如 使用了spring後的讀取mvc相關,db相關,service相關,aop相關的文件。
  3. 查看攔截器,監聽器代碼,知道攔截了什麼請求,這個類完成了怎樣的工做。有的人就是由於缺乏了這一步,本身寫了一個action,配置文件也沒有寫錯,可是卻怎麼調試也沒法進入這個action,直到別人告訴他,請求被攔截了。
  4. 接下來,看配置文件,首先必定是mvc相關的,如springmvc中,要請求哪些請求是靜態資源,使用了哪些view策略,controller註解放在哪一個包下等。而後是db相關配置文件,看使用了什麼數據庫,使用了什麼orm框架,是否開啓了二級緩存,使用哪一種產品做爲二級緩存,事務管理的處理,須要掃描的實體類放在什麼位置。最後是spring核心的ioc功能相關的配置文件,知道接口與具體類的注入大體是怎樣的。固然還有一些如apectj等的配置文件,也是在這個步驟中完成。
  5. log相關文件,日誌的各個級別是如何處理的,在哪些地方使用了log記錄日誌。
  6. 從上面幾點後知道了整個開源項目的總體框架,閱讀每一個方法就再也不那麼難了。
  7. 固然若是有項目配套的開發文檔也是要閱讀的。

3、Java框架源碼閱讀

固然了,就是Spring、MyBatis這類框架。

在讀Spring源碼前,必定要先看看《J2EE Design and Development》這本書,它是Spring的設計思路。注意,不是中文版,中文版徹底被糟蹋了。

想要閱讀MyBatis的源碼就要先了解它的一些概念,不然雲裏來霧裏去的什麼也不懂。有不少人會選擇去買一些書籍來幫助閱讀,固然這是可取的。那麼若是不想的話,就能夠去官網查看它的介紹(MyBatis網站:http://www.mybatis.org/mybati...)。

總結

沒有人一開始就能夠看得懂那些源碼,咱們都是從0開始的,並且沒有什麼捷徑可尋,無非就是看咱們誰願意花時間去研究,誰的求知慾更強烈,誰更有耐心。閱讀源碼的過程當中咱們的能力確定會提高,能夠從中學到不少東西。在咱們作項目的時候就會體現出來了,的確會比之前順手不少。

讀者福利:

分享免費學習資料
針對於還會準備免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)
爲何某些人會一直比你優秀,是由於他自己就很優秀還一直在持續努力變得更優秀,而你是否是還在知足於現狀心裏在竊喜!但願讀到這的您能點個小贊和關注下我,之後還會更新技術乾貨,謝謝您的支持!
資料領取方式:加入粉絲羣963944895,私信管理員便可免費領取

相關文章
相關標籤/搜索