dubbo原始碼解析 spi 五

2021-09-20 07:10:25 字數 1743 閱讀 5880

之前對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.反射生成物件.這三個知識點,我相信看這篇文章的,沒有人不會.

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

專案結構如圖:

執行結果如圖

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

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

Dubbo原始碼解析之SPI

dubbo版本 2.5.4 dubbo在服務發布過程中缺省會載入自適應的協議擴充套件,在類serviceconfig中存在以下初始化 下面以此進行spi過程分析。private static final protocol protocol extensionloader.getextensionlo...

dubbo原始碼解析 spi 4

aop是老生常談的話題了,思想都不會是一蹴而就的.比如架構設計從all in one到soa也是乙個逐步演進的過程,所以本篇也講講這個aop的思想演進過程.假如我們就以aop最常用的場景事務來說,我們最初的做法是怎麼樣的?public class employeeserviceimpl implem...

Dubbo原始碼分析之SPI(二)

本篇文章是dubbo spi原始碼分析的第二篇,接著第一篇繼續分析dubbo spi的內容,我們主要介紹 getdefaultextension 獲取預設擴充套件點方法。由於此方法比較簡單,我們略過示例部分,直接分析原始碼。獲取預設擴充套件方法getdefaultextension 是乙個publi...