動態(tài)代理的一些思考和疑問:(疑問還沒解決)
Posted on 2006-11-13 11:36 itspy 閱讀(1622) 評論(5) 編輯 收藏 所屬分類: 設(shè)計模式 、JAVA技術(shù)動態(tài)代理的一些思考和疑問:(疑問還沒解決)
在Java中有一個動態(tài)代理技術(shù),主要通過Proxy,InvocationHandler和Method,這三個類(接口)來實現(xiàn).但是有如下一個問題不太明白,希望高手解惑.
我查看了幾個例子,它們實現(xiàn)InvocationHandler這個接口時,都通過構(gòu)造函數(shù)傳遞進(jìn)去了,實際被代理的對象,然后在實現(xiàn)的方法中通過method.invoke(obj,args);obj為構(gòu)造函數(shù)傳遞進(jìn)來的對象.
比如下面的例子:
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);?
?}
}
函數(shù)invoke()傳遞進(jìn)去的第一個參數(shù)proxy就沒有被使用到,但同樣實現(xiàn)了動態(tài)代理的效果,后面參考文獻(xiàn)中的例子也是的,難道是這第一個參數(shù)就是多余的,如果是這樣的話,就是Sun設(shè)置失誤了 ^__^.
sun的文檔是這樣解釋這個參數(shù)的:proxy - the proxy instance that the method was invoked on.但這個參數(shù)有什么用的,如果不傳遞他進(jìn)來,會有什么不便呢.
有沒有人能明白這是怎么回事,或者是寫個示例代碼,講講這個第一個參數(shù)是干嘛用的?
?
?
注:附兩個完整的動態(tài)代理的例子
http://blog.csdn.net/hsyj_0001/archive/2006/04/02/647488.aspx
http://www.java2s.com/Code/Java/Development-Class/Demonstratesadynamicproxy.htm