實際生成對象是指定接口的代理對象,其中InvokerInvocationHandler作為代理對象實質邏輯
調用代理對象的方法,實質上是調用InvokerInvocationHandler.invoke方法,排除掉Object原生方法,屬於接口的方法使用invoker調用
MockClusterInvoker默認調用器
先從RegistryDirectory中獲取方法參數mock,默認取false,若為true強制模擬調用;最后嵌套Invoker調用
調用list方法根據調用方法名從registryDirectory中獲取invoker列表,采用負載均衡(默認隨機選擇)選取invoker進行調用
RegistryDirectory針對於某一接口而言的,其中存放methodInvokerMap,對所有方法的invoker以方法名為鍵緩存
若forbidden標志為真,表示該接口不可用,不存在提供者;forbidden標志在如下位置發生改變
接下來是ProtocolFilterWrapper構成公共協議調用,在初始化時通過url構成層級調用invoker鏈,調用鏈的末端是ProtocaolFilterWrapper.buildInvokerChain方法入參,往前追溯,這個入參何處得來?
可以看到,是由ReferenceConfig.refer方法中調用ProtocolFilterWrapper.refer得來,其中調用了protocol.refer(type,url)
這個protol根據協議配置不同而有所不同,這里DubboProtocol,其初始化的是DubboInvoker