【Dubbo 源碼解析】08_Dubbo與Spring結合

Dubbo 與 Spring 結合

基於 dubbo.jar 內的 META-INF/spring.handlers 配置,Spring 在遇到 dubbo 名稱空間時,會回調 DubboNamespaceHandlerspring

全部 dubbo 的標籤,都統一用 DubboBeanDefinitionParser 進行解析,基於一對一屬性映射,將 XML 標籤解析爲 Bean 對象。spa

ServiceConfig.export()ReferenceConfig.get() 初始化時,將 Bean 對象轉換 URL 格式,全部 Bean 屬性轉成 URL 的參數。code

而後將 URL 傳給協議擴展點,基於擴展點的擴展點自適應機制(Dubbo SPI),根據 URL 的協議頭,進行不一樣協議的服務暴露或引用。xml

 

執行過程:

  1. spring 掃描全部 jar 下 META-INF/spring.handlersMETA-INF/spring.schemas對象

  2. 運行dubbo.jar/META-INF/spring.handlers下定義的DubboNamespaceHandler的 init() 方法事件

  3. spring 加載 xml,執行 DubboBeanDefinitionParser 的 parse() 方法,經過RootBeanDefinition將serviceBean 暴露給 spring。(實際調用AutowireCapableBeanFactory.registerBeanDefinition)get

  4. ServiceBean 實現了 ApplicationListener<ContextRefreshedEvent>,Spring 容器 refresh() 以後,發送 Event 事件,而後 ServiceBean 作服務暴露操做。(服務暴露it

  5. ReferenceBean 實現了 InitializingBean,在 Bean 實例化過程當中會調用 afterPropertiesSet(),而後 ReferenceBean 作服務引用操做。(服務引用io

其中比較重要的是 ServiceBean 和 ReferenceBean。class

相關文章
相關標籤/搜索