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

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

 

 

資料內(nèi)容:

 

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

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


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