有些基础知识,时间久了也会忘的,就像JAVA反射和动态代理中的方法调用,一直不用的话就会混乱,其实很简单,反射只有一个对象,而代理肯定会有两个对象,那么对于一个对象反射方法调用是对对象进行字节码层面的特殊执行方式,所以执行的是method.invoke(originalObj,args);而动态代理则是在静态代理的基础上为了减少硬编码而进行的优化,所以方法调用的目标是"像静态调用代理对象的方法一样调用原始对象方法(记住是像,而不是是,因为代理类除了加上自定义的处理内容,比如前后处理逻辑外不能也没必要把原对象方法体重新实现一遍)",而实现这个效果就是靠的InvocationHandler接口(JDK自带)的实现类(代理类)的invoke(originalObj,originalObjMethod,args)方法了,而代理对象从哪里来,并不是new 出来的,而是使用Proxy类(JDK自带)的静态方法newProxyInstance(ClassLoader loader, Class
[] interfaces,InvocationHandler h)生成出来的(可以看到主要是通过原始对象的接口和自定义的InvocationHandler的实现类(持有一个originalObj实例通过反射调用,而RPC的原理则是反射的对象是网络序列化反序列化传输获取)的回调invoke方法).
参考:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html