讀dubbo原始碼筆記(一)

2021-09-01 09:38:16 字數 1964 閱讀 5811

首先看extension擴充套件,相當於dubbo最底層核心

如開發者所述:「dubbo的擴充套件點載入從jdk標準的spi(service provider inte***ce)擴充套件點發現機制加強而來。" ,基本上與serviceloader類似(童鞋們,可以先看serviceloader原始碼再來看這個,比較理解),但功能增強

下面看原始碼,整個extension擴充套件 ,最主要類就只有乙個 : extensionloader

先來看 extensionloader屬性:

下面是行為方法:

public 方法

getextensionloader

獲取 extensionloader 的唯一方式

然後 會在 方法內部呼叫構造器 ,構造器中 為每乙個extensionloader 生成乙個 extensionfactory 例項

getadaptiveextension

大部分 使用extensionloader 都會呼叫 adaptiveclass 來進行選擇處理

這個方法 在第一次呼叫的時候會 載入 services_directory dubbo_directory 檔案裡面對應 的 classname ,所以這裡是延遲載入

其餘的public 方法 沒什麼好說的

private 方法

在 getadaptiveextension 中載入的時候 呼叫過程如下

getadaptiveextension --createadaptiveextension --getadaptiveextensionclass --getextensionclasses (載入檔案classname)-----如果沒有adaptiveclass-----就會通過 createadaptiveextensionclass 位元組碼生成adaptiveclass-------injectextension

getadaptiveextension

public t getadaptiveextension() catch (throwable t) }}

}else

}return (t) instance;

}

createadaptiveextension -- 建立 adaptiveextension

private t createadaptiveextension() catch (exception e)

}

getadaptiveextensionclass -- 獲取 adaptiveextension 裡面包含了 2中 adaptiveextension **

private class<?> getadaptiveextensionclass()

return cachedadaptiveclass = createadaptiveextensionclass();

}

getextensionclasses 方法 裝配檔案 ,

然後判斷 有沒有cachedadaptiveclass

如果沒有 createadaptiveextensionclass 位元組碼建立

injectextension 方法-- 通過 objectfactory 來對 adaptiveextension instance 進行 di。

下面來說說這個

createadaptiveextensionclass 中的

createadaptiveextensionclasscode 方法

通過位元組碼生成 adaptiveclass

但是位元組碼生成的adaptiveclass 嚴重依賴url(主要是依賴url裡面的 protocol)。。看起來不那麼優雅。

extensionloader 作為 系統核心loader模式,不應該過分只為protocol 服務。

讀dubbo原始碼筆記(二)

第二回 前面一回講了dubbo擴充套件,這回來看 與spring的結合。其實可以把這個當成乙個spring自定義標籤的經典範例 首先我們來看 實際用例 重點看 注意這裡 步驟有如下幾步阿 1.首先 繼承 spring namespacehandlersupport,然後每個節點 實現 spring ...

讀dubbo原始碼筆記(三)

現在看 核心的 serviceconfig url 在服務提供者暴露乙個服務的詳細過程 講解的很清楚 服務提供者暴露乙個服務 這些 基本上都是在 serviceconfig 完成 過程是 export doexport doexporturls export 方法 主要是 解決立即doexport還...

筆記4 讀原始碼

好吧,截圖都沒了。就這把,內容很具體,跟著操作完全沒問題。系統設定中可看到關於手機容量的資訊,我們只要找到setting的原始碼,就能找到android系統是怎麼做到的。注意adt安裝目錄下的sdk sources目錄裡並不是android系統的原始碼,而是用到的jar包的原始碼。原始碼資料夾 bu...