dubbo 「插入」到spring框架

         做爲一個分佈式服務治理框架,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的宏觀啓動流程
相關文章
相關標籤/搜索