當前位置:編程學習大全網 - 源碼下載 - dubbo源碼13. 服務消費方之@Reference依賴註入原理

dubbo源碼13. 服務消費方之@Reference依賴註入原理

用法 :

當某個主要註冊到spring容器中的bean 的屬性上有@Reference註解時,並且 註解的injvm = false時(默認),表明該屬性會被註入壹個遠程接口實例,用作rpc遠程調用。

@Reference不是派生自spring默認支持的@Resource和@Autowired,那麽說明spring是不支持該註解用於依賴註入的,dubbo對此進行了支持該註冊的拓展。

在入口@EnableDubbo配置了掃描的包路徑

用於掃描類上含有dubbo@Service 和類屬性上含有 @Reference 的bean

@DubboComponentScan 導入了DubboComponentScanRegistrar

DubboComponentScanRegistrar實現Spring的ImportBeanDefinitionRegistrar接口,被調用到實現的registerBeanDefinitions()時,會註冊兩個beanPostProcessor類

ReferenceAnnotationBeanPostProcessor實現了和spring中支持@Autowired註冊的AutowiredAnnotationBeanPostProcessor壹模壹樣的接口 :MergedBeanDefinitionPostProcessor,繼承了InstantiationAwareBeanPostProcessorAdapter。兩者的工作邏輯幾乎壹模壹樣。

在bean實例化之後,對 bean進行依賴註入

postProcessPropertyValues()

這個方法每個bean實例化都會調到,ReferenceAnnotationBeanPostProcessor用的是父類AnnotationInjectedBeanPostProcessor的

判斷方法和類上是否有@Reference註解,並將其包包裝成AnnotationInjectedBeanPostProcessor.AnnotatedInjectionMetadata 對象,進行緩存

判斷屬性是否可以獲取到@Reference,獲取到返回

收集到需要依賴註入的屬性之後,下壹步獲取到被依賴的bean實例,進行反射賦值

調用內部類AnnotatedFieldElement中的inject方法

獲取到dubbo創建的代理實例,反射設置有@Reference的屬性上

  • 上一篇:boll指標詳解是怎樣的?
  • 下一篇:寶塔線三平底翻紅選股公式有哪些
  • copyright 2024編程學習大全網