天天看點

(轉)dubbo泛型化調用原理

背景:在開發mapi的過程中,自以為很了解其中的原理。實際上并不了解,主要是使用了dubbo中的泛型化調用的思想;

什麼是泛化調用?

泛接口調用方式主要用于用戶端沒有API接口及模型類元的情況,參數及傳回值中的所有POJO均用Map表示,通常用于架構內建,比如:實作一個通用的服務測試架構,可通過GenericService調用所有服務實作。

ps. ​<code>​GenericService​</code>​實際上是​<code>​Dubbo​</code>​提供的通用接口,解決使用通用接口調用任何服務方法

好處:最最直接的表現就是服務消費者不需要有任何接口的實作,就能完成服務的調用。

dubbo泛型化實作的流程:

GenericFilter: 負責provider端參數的轉換.

1、調用時,将hashmap結構的參數轉換成對應的pojo

2、傳回結果時, 将pojo轉換成hashmap

GenericImplFilter: 負責consumer端參數的轉換, 将POJO轉換成hashmap結構

這樣consumer端傳過來的隻是一個map, 并不要有provider端的jar包, 根據這個就可以實作dubbo接口的測試平台.

​<code>​核心方法:GenericService​</code>​這個接口和java的反射調用非常像, 隻需提供調用的方法名稱, 參數的類型以及參數的值就可以直接調用對應方法了.

PojoUtils 提供了對象和map的序列化和反序列化