Python知識(shí)分享網(wǎng) - 專(zhuān)業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
深度解析Dubbo的可擴(kuò)展機(jī)制SPI源碼:從理論到實(shí)踐,打造高效、穩(wěn)定的分布式服務(wù)框架 PDF 下載
發(fā)布于:2024-01-31 10:53:23
(假如點(diǎn)擊沒(méi)反應(yīng),多刷新兩次就OK!)

深度解析Dubbo的可擴(kuò)展機(jī)制SPI源碼:從理論到實(shí)踐,打造高效、穩(wěn)定的分布式服務(wù)框架 PDF 下載  圖1

 

 

資料內(nèi)容:

 

ExtensionLoader表示某個(gè)接?的擴(kuò)展點(diǎn)加載器,可以?來(lái)加載某個(gè)擴(kuò)展點(diǎn)實(shí)例。
在ExtensionLoader中除開(kāi)有上?的static的Map外,還有兩個(gè)?常重要的屬性:
1. Class<?> type:表示當(dāng)前ExtensionLoader實(shí)例是哪個(gè)接?的擴(kuò)展點(diǎn)加載器
2. ExtensionFactory objectFactory:擴(kuò)展點(diǎn)??(對(duì)象??),可以獲得某個(gè)對(duì)象
ExtensionLoader和ExtensionFactory的區(qū)別在于:
1. ExtensionLoader最終所得到的對(duì)象是Dubbo SPI機(jī)制產(chǎn)?的
2. ExtensionFactory最終所得到的對(duì)象可能是Dubbo SPI機(jī)制所產(chǎn)?的,也可能是從Spring容器中所獲
得的對(duì)象
在ExtensionLoader中有三個(gè)常?的?法:
1. getExtension("dubbo"):表示獲取名字為dubbo的擴(kuò)展點(diǎn)實(shí)例
2. getAdaptiveExtension():表示獲取?個(gè)?適應(yīng)的擴(kuò)展點(diǎn)實(shí)例
3. getActivateExtension(URL url, String[] values, String group):表示?個(gè)可以被url激活的擴(kuò)展點(diǎn)
實(shí)例,后?詳細(xì)解釋
其中,什么是?適應(yīng)擴(kuò)展點(diǎn)實(shí)例?它其實(shí)就是當(dāng)前這個(gè)接?的?個(gè)代理對(duì)象。

1 ExtensionLoader<Protocol> extensionLoader = ExtensionLoader.getExt
ensionLoader(Protocol.class);
2 Protocol protocol = extensionLoader.getExtension("dubbo");


當(dāng)我們調(diào)?上述代碼,我們會(huì)將得到?個(gè)DubboProtocol的實(shí)例對(duì)象,但在getExtension()?法中,
Dubbo會(huì)對(duì)DubboProtocol對(duì)象進(jìn)?依賴(lài)注?(也就是?動(dòng)給屬性賦值,屬性的類(lèi)型為?個(gè)接?,記為A
接?),這個(gè)時(shí)候,對(duì)于Dubbo來(lái)說(shuō)它并不知道該給這個(gè)屬性賦什么值,換句話說(shuō),Dubbo并不知道在進(jìn)
?依賴(lài)注?時(shí)該找?個(gè)什么的的擴(kuò)展點(diǎn)對(duì)象給這個(gè)屬性,這時(shí)就會(huì)預(yù)先賦值?個(gè)A接?的?適應(yīng)擴(kuò)展點(diǎn)實(shí)
例,也就是A接?的?個(gè)代理對(duì)象。
后續(xù),在A接?的代理對(duì)象被真正?到時(shí),才會(huì)結(jié)合URL信息找到真正的A接?對(duì)應(yīng)的擴(kuò)展點(diǎn)實(shí)例進(jìn)?調(diào)
?。