Posted on 2006-11-13 11:36
itspy 閱讀(1618)
評論(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