在dubbo-0x06-关于dubbo里面的代理中讲过dubbo层面的交互单元或者载体是Invoker
,那么它是什么呢
本质而言它的存在主要目的是为了在代理对象和客户端之间增加一层屏蔽掉代理方式的差异。
1 在javassist代理中使用
1 2 3 4 5 6 7 8 9 10 11 12 13
|
return new AbstractProxyInvoker<T>(proxy, type, url) { @Override protected Object doInvoke(T proxy, String methodName, Class<?>[] parameterTypes, Object[] arguments) throws Throwable { return wrapper.invokeMethod(proxy, methodName, parameterTypes, arguments); } };
|
2 在jdk代理使用
1 2 3 4 5 6 7 8 9
| return new AbstractProxyInvoker<T>(proxy, type, url) { @Override protected Object doInvoke(T proxy, String methodName, Class<?>[] parameterTypes, Object[] arguments) throws Throwable { Method method = proxy.getClass().getMethod(methodName, parameterTypes); return method.invoke(proxy, arguments); } };
|
jdk的反射没啥可看的,javassist的字节码方式可以看dubbo-0x07-反射