dubbo原始碼解析-spi(五)

微信公眾號_肥朝發表於2019-02-22
dubbo原始碼解析-spi(五)

前言

之前對dubbo的SPI進行了四篇的分享.大家對這個概念有了一些初步的瞭解.談到程式設計水平如何進階,大家可能都會異口同聲的說出三個字,看原始碼.但是我卻始終認為,程式設計光,是永遠學不會的.關鍵還是要多動手,但是很多時候,連怎麼看原始碼都無從下手,你叫我寫仿寫原始碼,這不是開玩笑?

dubbo原始碼解析-spi(五)

我們可以回憶一下我們在公司是怎麼寫程式碼的.首先產品提出需求,接著開需求評審會,再接著程式碼設計,最後開始編碼.

今天我們就仿造這個流程,自己動手實現dubbo的spi

提出需求

dubbo原始碼解析-spi(二) 中,我們已經分析了dubbo中spi和jdk中spi有什麼區別,dubbo相比jdk變化的內容大致如下:

(一) 擴充點增加了快取,提高了效能
(二) 增加了spi的預設值
(三) 增加了通過key的形式獲取擴充點
(四) 增加了IocAOP功能

這裡插句題外話,我們不能為了看原始碼而看原始碼,最重要的是,在看原始碼的過程中,學會分析問題的思路.假如有個新的RPC框架,比如肥朝RPC,我問你肥朝RPC中的SPI和JDK的SPI有幾點區別呢?我在dubbo原始碼解析-spi(二)這篇中,就把我是如何分析出這四點的整個心路歷程展示出來,你可以大膽走進我的內心世界.

需求評審

既然是需求評審,其實說白了,就是和產品砍需求.產品提出的需求就是上面那四個功能.(一)(二)(三)都是基本又比較核心的功能,這些砍了那這個版本就沒意思了,(四)這個可以放在下一個版本去迭代開發.

程式碼設計

只要實現了key-value獲取擴充點,那麼獲取預設擴充點就很容易了,因為這個預設擴充點只是key-value的一種特殊形式,他的預設值,也就是這個key,就在SPI註解上.其實思路總起起來就一句話,因為我們在擴充點配置檔案裡面已經配置了實現類的許可權定名.首先我們把這些配置檔案全部載入出來,解析出全限定名,快取起來.然後你要獲取具體的擴充點,我就在快取中把他的許可權定名拿出來,反射例項化成一個物件返回回去.也就是1.讀取並解析檔案內容 2.放入map快取 3.反射生成物件.這三個知識點,我相信看這篇文章的,沒有人不會.

按照上面的分析,把程式碼寫出來不難吧.什麼,寫不出?那往下看

編碼

專案結構如圖:

dubbo原始碼解析-spi(五)

執行結果如圖

dubbo原始碼解析-spi(五)

程式碼已經上傳到碼雲.可以下載跑起來,本來想用時序圖,流程圖和大家把思路理一下的,但是弄了幾個小時,我覺得還不如自己看程式碼清楚.核心程式碼程式碼不到300行.有問題可以留言.

地址: https://gitee.com/HelloToby/tobySPI

克隆/下載按鈕,然後下載ZIP,然後匯入eclipse或者idea就可以執行了.

小提示

因為之前部分同學反饋對原始碼中的思路還不是很清晰.所以這次我就直接把原始碼中的功能模組抽成一個demo,然後大家先把demo執行起來,接著把demo裡面的程式碼重複寫個一兩遍.因為demo和原始碼一比一高仿的(變數名,方法名甚至if換不換行都儘量一致了).所以這個時候,再去看原始碼就和看自己寫的程式碼應該一樣的.這樣思路就清晰很多了.希望這個方式對你閱讀原始碼有幫助.

寫在最後

這個是停更兩個月後,迴歸的第一篇文章.由於公司的某些原因,接下來可能無法像去年一樣,每週一更.但是儘量保證,兩週一更.但是即使兩週一更,也會每週不斷學習提升自己,給大家帶來更好的分享.但是鑑於肥朝才疏學淺,文中不足之處還望你不吝斧正.也歡迎關注我的掘金,名稱為肥朝.

相關文章