正在研究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是如何实现的呢?
以接口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是如何实现的呢?
Have I made myself understood?有一种可能,由于代码是动态生成的,所以,对于各方法的标识是可以获取的,因此,动态构造一个Name为相应方法的Method对象传递给invocationhandler。
这种方法比较简单,不过蛮难看的。
改为
Have I made myself clear?
比较舒服