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