隨筆-16  評論-50  文章-2  trackbacks-0

          如果想在運行時生成新的對象,并且這個對象的類型是全新的,是現(xiàn)有系統(tǒng)中沒有的。就可以用Proxy類中的靜態(tài)方法newProxyInstance來實現(xiàn)。其API如下:

          public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler handler);

          參數(shù):

          • loader: 類加載器。如果為null,就要默認(rèn)類加載器
          • interfaces: 這個新類要實現(xiàn)的接口組
          • 調(diào)用處理器。

          函數(shù)返回的對象類型是$Proxyn, (n >= 0. 第一次調(diào)用這個方法,新類名為$Proxy0, 第二個新類名為$Proxy1, 以此類推)

          生成的$Proxyn 的源代碼大致類似如此:

          public final class $Proxy0 implements interfaces {
              InvocationHandler handler;

              public String toString() {
                  Method m = this.getClass().getMethod("toString");
                  handler.invoke(this, m, m.getParameters());
              }

              public int hashCode() {
                  Method m = this.getClass().getMethod("hashCode");
                  handler.invoke(this, m, m.getParameters());
              }

              public String equals() {
                  Method m = this.getClass().getMethod("equals");
                  handler.invoke(this, m, m.getParameters());
              }

             
              // 以下是實現(xiàn)interfaces的方法
              public return_type interfaces_method(args...) {
                  Method m = this.getClass().getMethod("equals");
                  handler.invoke(this, m, m.getParameters());       
             }

             ... ...接口interfaces中的其他方法  
          }

           

          當(dāng)我們這樣調(diào)用時: Object o = Proxy.newProxyInstance(null, interfaces, handler0);

          就生成一個新$Proxy0類的對象o, 這個對象o的字段handler被賦值為handler0。$Proxy0實現(xiàn)了interfaces中所有的接口,其實現(xiàn)方式都一樣,就是調(diào)用字段handler的invoke方法。其UML圖如下:

          proxy

          posted on 2008-01-06 14:11 Jeff Lau 閱讀(1489) 評論(1)  編輯  收藏 所屬分類: Jeff On Java 2008

          評論:
          # re: 代理(Proxy) 2008-02-29 10:08 | CoderDream
          不錯!

          不過都是偽代碼,讓初學(xué)者很難看懂!  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 北流市| 满城县| 聊城市| 景德镇市| 沙洋县| 潞城市| 梁山县| 浦北县| 乐安县| 襄樊市| 北票市| 濉溪县| 藁城市| 定州市| 秦皇岛市| 拉孜县| 潮安县| 杨浦区| 玛曲县| 吉安县| 凤庆县| 兴隆县| 永城市| 墨玉县| 姜堰市| 綦江县| 武山县| 虞城县| 桂阳县| 华池县| 绥芬河市| 江陵县| 郑州市| 上蔡县| 东明县| 商河县| 乌审旗| 中宁县| 花垣县| 建湖县| 哈巴河县|