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

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

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

    隨筆-57  評論-202  文章-17  trackbacks-0
          在JDK1.3版本中引入了Dynamic Proxy的代理機制,通過實現java.lang.reflect.InvocationHandler接口,可以實現攔截需要改寫的方法。下面是一個簡單范例。
          有下面一個接口TestInterface和它的一個實現TestImpl:

    package sample.proxy;

    /**
     * <p>Title: </p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2005</p>
     *
     * <p>Company: </p>
     *
     * @author George Hill
     * @version 1.0
     
    */


    public interface TestInterface {

      
    public String print();

    }


    package sample.proxy;

    /**
     * <p>Title: </p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2005</p>
     *
     * <p>Company: </p>
     *
     * @author George Hill
     * @version 1.0
     
    */


    public class TestImpl implements TestInterface {
      
      
    public String print() {
        
    return "Hello, it's from TestImpl class";
      }

      
    }


          下面攔截print方法,調用自己的實現,這需要實現java.lang.reflect.InvocationHandler接口。

    package sample.proxy;

    import java.lang.reflect.
    *;

    /**
     * <p>Title: </p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2005</p>
     *
     * <p>Company: </p>
     *
     * @author George Hill
     * @version 1.0
     
    */


    public class TestHandler implements InvocationHandler {
      
      TestInterface test;
      
      
    /**
       * 將動態代理綁定到指定的TestInterface
       * @param test TestInterface
       * @return TestInterface 綁定代理后的TestInterface
       
    */

      
    public TestInterface bind(TestInterface test) {
        
    this.test = test;
        
        TestInterface proxyTest 
    = (TestInterface) Proxy.newProxyInstance(
          test.getClass().getClassLoader(), test.getClass().getInterfaces(), 
    this);
        
        
    return proxyTest;
      }

      
      
    /**
       * 方法調用攔截器,攔截print方法
       * @param proxy Object
       * @param method Method
       * @param args Object[]
       * @return Object
       * @throws Throwable
       
    */

      
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        
    // 如果調用的是print方法,則替換掉
        if ("print".equals(method.getName())) {
          
    return "HaHa, It's come from TestHandler";
        }
     else {
          
    return method.invoke(this.test, args);
        }

      }

      
    }


          下面是測試用例:

    package sample.test;

    import junit.framework.
    *;

    import sample.proxy.
    *;

    /**
     * <p>Title: </p> 
     * 
     * <p>Description: </p> 
     * 
     * <p>Copyright: Copyright (c) 2005</p> 
     * 
     * <p>Company: </p>
     * 
     * @author George Hill
     * @version 1.0
     
    */


    public class TestDynamicProxy extends TestCase {
      
      
    private TestInterface test = null;

      
    protected void setUp() throws Exception {
        super.setUp();
        TestHandler handler 
    = new TestHandler();
        
    // 用handler去生成實例
        test = handler.bind(new TestImpl());
      }


      
    protected void tearDown() throws Exception {
        test 
    = null;
        super.tearDown();
      }


      
    public void testPrint() {
        System.
    out.println(test.print());
      }


    }


          運行測試用例,可以看到輸出的是“HaHa, It's come from TestHandler”。
    posted on 2005-05-24 17:47 小米 閱讀(3499) 評論(3)  編輯  收藏 所屬分類: Java

    評論:
    # re: JDK Dynamic Proxy模式的簡單范例 2005-10-20 13:10 | 鳥不生蛋蛋的地方
    if ("print".equals(method.getName())) {
    return "HaHa, It's come from TestHandler";
    } else {
    return method.invoke(this.test, args);

    為什么這里的返回改成return method.invoke(proxy, args);就不行,這兩個應該應用同一個對象吧,請教
      回復  更多評論
      
    # re: JDK Dynamic Proxy模式的簡單范例 2005-12-08 11:11 | 寂寞邀請
    操作順序 client->proxy->this.test->實際的操作

    換成return method.invoke(proxy, args),就死循環了。

    client->proxy->proxy->proxy...........  回復  更多評論
      
    # re: JDK Dynamic Proxy模式的簡單范例[未登錄] 2011-06-20 17:40 | fox
    簡單,明了  回復  更多評論
      
    主站蜘蛛池模板: 亚洲一区二区观看播放| 日本一道综合久久aⅴ免费| 亚洲黄片毛片在线观看| 亚洲人成电影网站| 免费a级毛片无码a∨免费软件| 国产无遮挡吃胸膜奶免费看| 亚洲欧洲日本天天堂在线观看| 中文字幕无码免费久久| jlzzjlzz亚洲乱熟在线播放| 亚洲大尺度无码无码专线一区| 免费大片黄在线观看yw| 亚洲精品视频免费看| 久久久久久久99精品免费观看| 亚洲AV无码专区日韩| 国产亚洲福利精品一区二区| 国产免费av片在线无码免费看| 亚洲中文字幕无码久久2020 | 亚洲AV无码久久精品蜜桃| 看一级毛片免费观看视频| 看全色黄大色大片免费久久| 亚洲国产成人无码AV在线| 成人免费视频试看120秒| 亚洲午夜福利在线视频| 嫩草影院免费观看| 亚洲欧美成人av在线观看| 女人被男人桶得好爽免费视频| 最新亚洲精品国偷自产在线 | 久久99精品国产免费观看| 久久久综合亚洲色一区二区三区| 国产在线精品一区免费香蕉| 亚洲中文字幕不卡无码| 男人j进入女人j内部免费网站| 亚洲精品少妇30p| 青青青国产手机频在线免费观看 | 亚洲狠狠狠一区二区三区| 91久久成人免费| 亚洲精品无码少妇30P| 免费一级做a爰片性色毛片| j8又粗又长又硬又爽免费视频| 亚洲午夜久久久久久噜噜噜| 四虎影视在线影院在线观看免费视频|