正在研究java.lang.reflect.Proxy类,该类内部会为接口生成对应的Proxy类,如:packagename.Proxy0,但由于找不到对应的辅助类的代码(相关代码似乎没有包含在JDK的源码包中),有些事情搞不太明白:
以接口I1为例,生成的Proxy类可认为是如下定义的结果:
package packagename;public class Proxy0 implements I1 {
  public Object I1_method1(args) {...}
  ...
}
那么,客户程序:
I1 i = Proxy.newProxyInstance(...);
i.I1_method1();
对I1_method1的调用怎么会转发给InvocationHandler的invoke方法呢?除非生成的I1_method1实现代码中主动这么处理的,即将I1_method1实现为:
public Object I1_method1(args) {
  invocationhandler.invoke(this, method, args);
}
但其中将调用请求I1_method1转为Method对象method是如何实现的呢?

解决方案 »

  1.   

    难道我没有说清楚吗?
    Have I made myself understood?有一种可能,由于代码是动态生成的,所以,对于各方法的标识是可以获取的,因此,动态构造一个Name为相应方法的Method对象传递给invocationhandler。
    这种方法比较简单,不过蛮难看的。
      

  2.   

    Have I made myself understood?
    改为
    Have I made myself clear?
    比较舒服
      

  3.   

    类是动态生成的,实现了某些接口,方法调用被InvocationHandle处理
      

  4.   

    根据方法名 利用反射 可以获得Method的对象 Method method = i.getClass().getMethod("I1_method1", null) ;