Dubbo剖析-服務提供方實現類到Invoker的轉換

weixin_34320159發表於2018-03-25

一、前言

前面dubbo整體架構分析裡面我們講解了服務提供者暴露一個服務的詳細過程是,首先具體服務的實現類轉換為了Invoker物件,然後Invoker在轉換為Exporter,本文就來講解第一步轉換。

5879294-d54eb9a19e213e10.png
image.png

二、實現類到Invoker物件的轉換

服務提供方式是通過下面方法實現服務提供的實現類到Invoker物件的轉換

5879294-eefef90aad800a32.png
image.png

其中proxyFactory是代理類的擴充套件介面,預設情況下這裡呼叫getInvoker返回的spi擴充套件實現類是JavassistProxyFactory,也就是這裡是呼叫了JavassistProxyFactory的getInvoker方法。JavassistProxyFactory的getInvoker方法程式碼如下:

5879294-50ddd7ba778ebede.png
image.png

程式碼裡面首先建立了代理類的一個wrapper類,目的是消除反射呼叫,原理類似於cglib的索引方式去除反射呼叫,提高效能。

然後建立了一個AbstractProxyInvoker類,並重寫了doInvoke方法。

當提供方接受到服務消費的請求後最後會呼叫AbstractProxyInvoker的doInvoke,而doInvoke內部委託包含代理類的wrapper類來具體執行。

三、總結

服務提供方實現類到Invoker的轉換,是通過 ProxyFactory 類的 getInvoker 方法使用 服務實現類 生成一個AbstractProxyInvoker 例項,其中使用wrapper類消除反射,提高效能。

歡迎大家加入微信掃碼進入知識星球進行深入探討


5879294-02695ddb46e69d12.png
121、.png

相關文章