一、前言
前面dubbo整體架構分析裏面我們講解了服務提供者暴露一個服務的詳細過程是,首先具體服務的實現類轉換爲了Invoker對象,然後Invoker在轉換爲Exporter,本文就來講解第一步轉換。
二、實現類到Invoker對象的轉換
服務提供方式是通過下面方法實現服務提供的實現類到Invoker對象的轉換
其中proxyFactory是代理類的擴展接口,默認情況下這裏調用getInvoker返回的spi擴展實現類是JavassistProxyFactory,也就是這裏是調用了JavassistProxyFactory的getInvoker方法。JavassistProxyFactory的getInvoker方法代碼如下:
代碼裏面首先創建了代理類的一個wrapper類,目的是消除反射調用,原理類似於cglib的索引方式去除反射調用,提高性能。
然後創建了一個AbstractProxyInvoker類,並重寫了doInvoke方法。
當提供方接受到服務消費的請求後最後會調用AbstractProxyInvoker的doInvoke,而doInvoke內部委託包含代理類的wrapper類來具體執行。
三、總結
服務提供方實現類到Invoker的轉換,是通過 ProxyFactory 類的 getInvoker 方法使用 服務實現類 生成一個AbstractProxyInvoker 實例,其中使用wrapper類消除反射,提高性能。