dubbo是如何“插入”到spring框架中的

原文鏈接:http://blog.csdn.net/achilles12345/article/details/41789527

----------------------------------------------------------------------------------------------

? 作為一個分布式服務治理框架,dubbo做的非常好,在業界使用很廣,所以最近研究了下這個框架。任何框架要研究其原理最好的辦法之一就是沿著其運行流程進行追蹤,這樣就能從上到下,從粗到細對一個系統進行了解。今天,我們要說明的問題就是dubbo如何啟動的。


? ? ? ? dubbo是基于Spring進行開發的,而且擴展了Spring的XML schema和注解標簽,其實這里也就是整個dubbo的切入點。dubbo除去依賴其他的第三方框架外,整個框架只有一個jar包,可謂是精致。在這個jar包的NET-INF目錄下有兩個文件:spring.handlers和spring.schemas。其中spring.schemas中定義的就是擴展的spring配置標簽,而且spring.handlers中定義的就是這些schema的處理類,就是這個類將dubbo組件“插入”到spring這個平臺里的。(關于如何自定義spring配置的schema,網上資料很多,這里只簡單概括)Spring在啟動的時候會掃描MET-INF下所有的spring.handlers等文件,找到其中的標簽處理類,并運行其init方法。


? ? ? ? 這里要插個知識點“spring的啟動過程”。spring啟動過程,從宏觀角度來講分為兩個階段。第一個階段完成spring配置文件的解析,或者spring注解的解析最終將這些配置或者注解解析成BeanDefinition對象,然后進入下一個階段,比如我們經常在spring配置文件中使用的占位符替換工作就是在這個階段完成的。在第二個階段中,spring用之前解析好的BeanDefinition對象來完成bean的初始化和組裝工作,比如我們使用spring事務時的事務proxy就是這個階段完成注入到service對象中的。


? 在這個init方法中,dubbo將自己的標簽(application,module,registry,monitor,provider,consumer,protocol,service,reference)處理類注冊到spring中,而這些類會完成對自己所負責的標簽的解析工作,將標簽最終轉換為bean的描述對象BeanDefinition并返回給spring,而spring拿到這些標簽對象完成bean的初始化、依賴注入(比如注入對RMI端的proxy對象)。


這就是dubbo的宏觀啟動流程,這個對于理解dubbo框架的原理能起到促進作用,網上也沒有明確的文章進行說明,這里做個補充。希望能幫大家解決一些問題。




本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538331.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538331.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538331.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle數據庫抽取到gp,Oracle遷移數據到Greenplum

端表結構SQL> select dbms_metadata.get_ddl(TABLE,TAB_ORA,ZWC) from dual;CREATE TABLE "ZWC"."TAB_ORA"( "ID" NUMBER,"OWNER" VARCHAR2(30),"NAME" VARCHAR2(128),CONSTRAINT "PK_ID" PRIMARY KEY (&qu…

postgresql 插入 時間戳_數據也玩躲貓貓?PostgreSQL中別人提交的數據,我為什么看不到?...

原創: Aken DB印象文章鏈接:https://mp.weixin.qq.com/s/OkJaWbzcXcJtzSCOFnqeXQ文章作為DB的學習體會,若有錯誤歡迎指導。一、環境介紹操作系統:CentOS Linux release 7.6.1810 (Core) DB版本:PostgreSQL -11.5 on x8…

VMware打卡虛擬機提示“此虛擬機可能已被復制或移動”

“我已移動虛擬機” //表示打開后的虛擬的網卡的mac地址不變,如果復制本地的,同時開機在一個vmnet可能造成沖突。 “我已復制虛擬機” //表示打開后的虛擬機的網卡的物理地址是新生成的,建議不懂的就選這個。 “取消” …

埋坑一: vue中子組件調用兄弟組件方法

小計: 開發中遇到子組件需要調用兄弟組件中的方法,如下寫個小demo記錄下心得,如果你有好的方法,請到評論區域指教 父組件示例代碼: 組件功能解析: 通過$emit獲取子組件事件,通過$ref調用子組件中…

nioqrc oracle,程序停在?readnocancel?()?from?-lib-tls-libpthread.so.0

程序停在 readnocancel () from -lib-tls-libpthread.so.0(2012-04-10 23:20:56)標簽:程序雜談程序停在 __read_nocancel () from /lib/tls/libpthread.so.0我在 IBMBladeCenter JS21機器 (計算機集群)上 利用 MPI C 編程, 但出現了一些奇怪的現象。那就…

synchronized 方法 導致插入數據插不進_synchronized 原理知多少

本文轉載于SegmentFault社區作者:ytaosynchronized是 Java 編程中的一個重要的關鍵字,也是多線程編程中不可或缺的一員。本文就對它的使用和鎖的一些重要概念進行分析。使用及原理synchronized 是一個重量級鎖,它主要實現同步操作&#xff0c…

SpringMVC源碼解析(四)——請求處理

2019獨角獸企業重金招聘Python工程師標準>>> 前言 這一篇,將著手介紹一次請求的處理。用到了 HandlerMapping、HandlerAdapter 知識,如果遇到不是太了解,可以回顧下。 源碼分析 其實 DispatcherServlet 也只是 Servlet 的一個實現…

oracle中where中使用函數,Oracle 盡量避免在 SQL語句的WHERE子句中使用函數

-- Start在 WHERE 子句中應該盡量避免在列上使用函數,因為這樣做會使該列上的索引失效,影響SQL 語句的性能。即使該列上沒有索引,也應該避免在列上使用函數。考慮下面的情況:CREATE TABLE EMPLOYEE(NAME VARCHAR2(20) NOT NULL,--…

求近似數最值_干貨|初中數學《數的開方》知識點梳理

本章內容課標的要求● 1.了解平方根、算術平方根、立方根的概念,會用根號表示數的平方根、算術平方根、立方根。● 2.了解乘方與開方互為逆運算,會用平方運算求百以內整數的平方根,會用立方運算會求百以內整數(對應的負整數)的立方根&#xf…

第三章(續)

目錄 第二章 灰度變換與空間濾波(續)直方圖處理與函數繪圖生成直方圖直方圖均衡直方圖匹配空間濾波線性空間濾波非線性空間濾波圖像處理工具箱的標準濾波器線性空間濾波器非線性空間濾波器第二章 灰度變換與空間濾波(續) 直方圖處理與函數繪圖 生成直方圖 應用函數 imhist 語法…

Linux Mysql 安裝方法

1、檢查是否有安裝 [rootJDDB mysql]# yum list installed | grep mysql mysql-community-client.x86_64 5.6.39-2.el7 mysql56-community mysql-community-common.x86_64 5.6.39-2.el7 mysql56-community mysql-community…

oracle 經緯度算距離,根據經緯度訣別用java和Oracle存儲過程計算兩點距離

根據經緯度分別用java和Oracle存儲過程計算兩點距離create or replace procedure SP_GET_DISTANCE(cx in number,cy in number,sx in number, sy in number,distance out varchar2)isd number;x number;y number;r number;pi number;begin--開始計算r:6371229;--地球半徑pi:3.1…

Kafka集群安裝--測試--關閉

一、前提 1、kafka安裝包下載:http://kafka.apache.org/downloads 2、jdk已安裝 3、scala已安裝 4、zookeeper集群已安裝并運行二、步驟 1、對kafka_2.9.2-0.8.1.tgz進行解壓縮:tar -zxvf kafka_2.9.2-0.8.1.tgz。2、對kafka目錄進行改名:mv …

Java中的工廠模式

設計模式遵循原則 開閉原則:對擴展開放,對修改關閉里氏代換原則:只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被覆用。而衍生類也能夠在基類的基礎上增加新的行為依賴倒轉原則:開閉…

python的底層實現_Python底層封裝實現方法詳解

這篇文章主要介紹了Python底層封裝實現方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下事實上,python封裝特性的實現純屬“投機取巧”,之所以類對象無法直接調用私有方法和屬性&a…

php 附近的距離,PHP查詢附近的人及其距離的實現方法_PHP

本文實例講述了PHP查詢附近的人及其距離的實現方法。分享給大家供大家參考,具體如下:array(lat>$lat $dlat,lng>$lng-$dlng),right-top>array(lat>$lat $dlat, lng>$lng $dlng),left-bottom>array(lat>$lat - $dlat, lng>$ln…

統計指定目錄下的視頻時長

package time;import java.io.File;import org.apache.log4j.Logger;import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.EncoderException; import it.sauronsoftware.jave.MultimediaInfo;public class Test2 {/* 支持的后綴 */private static final Str…

怎么在cmd中運行python腳本_cmd中運行python腳本智能使用流程

(此時的ScaleMode自動變Vbuser)更有趣的是用來計算字串高、寬的TextHeight/TextWidth也變成以座標0-100的方式來表現了On Error Resume NextSet outstreemWscript.stdoutIf (LCase(Right(Wscript.fullname,11))"Wscript.exe") ThenSet objShellWscript.CreateObject(…

世界時鐘 軟件_Clocker for Mac(世界時鐘軟件)

Clocker for Mac是一款Mac平臺上免費的世界時鐘工具,方便我們查看世界各地的時間,它是開源免費的,完全沒有廣告。包括數百個時區,支持24小時制或AM / PM,macz提供Clocker mac免費版,歡迎前來下載&#xff0…

Mac 設置 NDK

2019獨角獸企業重金招聘Python工程師標準>>> 1、首先查看我自己的android studio ,找到以下路徑 如上圖,打開一個 AS 項目,file - project structure 這是我的3 個路徑 Ndk /Users/dhbm/Library/Android/sdk/ndk-bundle Sdk /User…