如下圖:
doExportUrlsFor1Protocol(…)這個(gè)函數可以理解為通過(guò)具體協(xié)議進(jìn)行服務(wù)暴露。
(4)最終調用的是InjvmProtocol的export(), 然后構建了一個(gè)InjvmExporter對象作為本地暴露對象,然后將構建的對象存入AbstractProtocol的exporterMap中,與此同時(shí),構建的InjvmExporter中也持有一份exporterMap的引用。
我們知道服務(wù)暴露的核心組件是ServiceBean,我們也知道ServiceBean是在基于spring可擴展的XMLschema實(shí)例化來(lái)的,也就是說(shuō)在spring容器啟動(dòng)的過(guò)程當中就完成了服務(wù)的暴露,接下來(lái)我們著(zhù)重分析這個(gè)類(lèi)就可以了。
很明顯,如果我們不配置動(dòng)態(tài)代理方式,那么缺省是javassist。
具體執行export的是ProtocolListenerWrapper,我們先看下執行的過(guò)程(接下來(lái)是一片連續代碼截圖~)
ServiceConfig#export(),這個(gè)方法首先會(huì )根據用戶(hù)配置判斷是否暴露,以及是否延遲暴露,不關(guān)注這塊邏輯的話(huà),最關(guān)鍵的部分是調用doExport()這個(gè)方法。如圖:
我們可以猜想AbstractInterfaceConfig#loadRegistries()這個(gè)函數會(huì )將用戶(hù)配置的協(xié)議轉換為內部的URL對象(dubbo統一數據模型)加載到一個(gè)list當中。斷點(diǎn)進(jìn)入loadRegistries()這個(gè)方法去驗證下我們的想法~ 如圖:
服務(wù)暴露時(shí)序圖
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站