<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 82, comments - 269, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    動態代理的一些思考和疑問:(疑問還沒解決)
    在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


    評論

    # re: 動態代理的一些思考和疑問:(疑問還沒解決)  回復  更多評論   

    2006-11-14 00:33 by kafka0102
    實際使用的代理對象應該通過Proxy.newProxyInstance這樣的方法實現,而代理對象調用的就是繼承了InvocationHandler的類的public Object invoke(Object proxy, Method method, Object[] args)方法,這里的Object proxy應該就是代理對象本身。如果你的method.invoke(this.delegate, args); 改成method.invoke(proxy, args);將出現不斷的循環。


    # re: 動態代理的一些思考和疑問:(疑問還沒解決)  回復  更多評論   

    2006-11-14 09:39 by itspy
    @kafka0102

    樓上是高手!

    是的,是出現了不斷的循環,這個我已經測試過了,并且循環一定次數之后就出現了異常。

    如果是這樣的話,方法public Object invoke(Object proxy, Method method, Object[] args)

    傳遞進來的proxy參數有什么用?難道是sun設計錯了?

    # re: 動態代理的一些思考和疑問:(疑問還沒解決)  回復  更多評論   

    2006-11-14 11:03 by yubaojian0616
    你沒有明白動態代理類的作用! 如果你返回 method.invoke(this.delegate, args); 他會繼續調用invoke方法 然后繼續返回 所以出現了死循環! 如果你沒有需要在代理的內容應該返回null,如果有就返回代理的對象

    # re: 動態代理的一些思考和疑問:(疑問還沒解決)  回復  更多評論   

    2006-11-14 11:19 by itspy
    @yubaojian0616
    謝謝你的回復,你可能剛好弄反了

    method.invoke(proxy, args);這種方法會形成死循環


    method.invoke(this.delegate, args); 這種是正確的調用,文章最后有兩個參考引用,都是使用這種方式。


    對于這點,你樓上的kafka0102就說的很對,你可能剛好說反了,或者是你理解上和我一樣,有不明白的地方。不信你可以寫測試程序去測試一下。或者是直接把引文里面的例子弄下來測試。



    # re: 動態代理的一些思考和疑問:(疑問還沒解決)  回復  更多評論   

    2012-08-21 21:47 by chaisencs
    你去看一下這個類RemoteObjectInvocationHandler的源代碼,就知道參數proxy其實是有用的
    主站蜘蛛池模板: 久久午夜羞羞影院免费观看| 丁香六月婷婷精品免费观看| 一区二区免费视频| 国产精一品亚洲二区在线播放| 四虎精品成人免费视频| 免费又黄又爽又猛的毛片| 亚洲精品精华液一区二区| 成人一a毛片免费视频| 亚洲免费综合色在线视频| 日本一道在线日本一道高清不卡免费 | 免费看韩国黄a片在线观看| 国产成人精品亚洲日本在线| 国产又黄又爽又猛免费app| 亚洲黄页网在线观看| 国内精品免费视频自在线| 国产午夜亚洲精品不卡| 亚洲精品无码专区2| 二个人看的www免费视频| 亚洲日韩国产精品第一页一区| 国产在线精品观看免费观看| 亚洲精品无码永久中文字幕| 四虎影视在线影院在线观看免费视频 | 亚洲精品免费在线观看| 国产成人yy免费视频| 亚洲一本一道一区二区三区| 日韩毛片免费在线观看| caoporn成人免费公开| 亚洲国产精品一区二区久久hs| 最近中文字幕免费2019| 亚洲av无码成人精品国产| 综合亚洲伊人午夜网 | 又粗又硬又大又爽免费视频播放| 在线播放免费人成视频网站| 久久水蜜桃亚洲av无码精品麻豆| 毛片在线看免费版| 中文字幕在线免费观看视频| 亚洲五月六月丁香激情| 日韩一区二区三区免费体验| 久久精品成人免费看| 亚洲欧美熟妇综合久久久久| 亚洲日韩精品射精日|