Posted on 2006-11-13 11:36
itspy 阅读(1605)
评论(5) 编辑 收藏 所属分类:
设计模式 、
JAVA技术
动态代理的一些思考和疑问:(疑问还没解决)
在Java中有一个动态代理技术,主要通过Proxy,InvocationHandler和Method,这三个类(接口)来实现.但是有如下一个问题不太明白,希望高手解惑.
我查看了几个例子,它们实现InvocationHandler这个接口时,都通过构造函数传递进去了,实际被代理的对象,然后在实现的方法中通过method.invoke(obj,args);obj为构造函数传递进来的对象.
比如下面的例子:
public class Handler implements InvocationHandler {
MethodInterface delegate;
public Handler(MethodInterface delegate) {
this.delegate = delegate;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (method.getName().equals("say")) {
System.out.print("I have get it");
}
return method.invoke(this.delegate, args);
}
}
函数invoke()传递进去的第一个参数proxy就没有被使用到,但同样实现了动态代理的效果,后面参考文献中的例子也是的,难道是这第一个参数就是多余的,如果是这样的话,就是Sun设置失误了 ^__^.
sun的文档是这样解释这个参数的:proxy - the proxy instance that the method was invoked on.但这个参数有什么用的,如果不传递他进来,会有什么不便呢.
有没有人能明白这是怎么回事,或者是写个示例代码,讲讲这个第一个参数是干嘛用的?
注:附两个完整的动态代理的例子
http://blog.csdn.net/hsyj_0001/archive/2006/04/02/647488.aspx
http://www.java2s.com/Code/Java/Development-Class/Demonstratesadynamicproxy.htm