<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
    簡單,明了  回復  更多評論
      
    主站蜘蛛池模板: 国产好大好硬好爽免费不卡| 日产久久强奸免费的看| 亚洲黄色在线观看视频| 亚洲美女自拍视频| 日本高清免费观看| 久久久久无码精品亚洲日韩 | 亚洲久本草在线中文字幕| 亚洲Av高清一区二区三区| 亚洲爆乳精品无码一区二区| 国产精品免费αv视频| 亚洲一区二区三区免费观看| 免费阿v网站在线观看g| 亚洲精品成a人在线观看| 久久久久亚洲精品影视| 在线免费中文字幕| 国产成人毛片亚洲精品| 亚洲三级在线观看| 一个人看的免费视频www在线高清动漫 | 国产免费资源高清小视频在线观看| 亚洲第一视频在线观看免费| 亚洲午夜视频在线观看| 麻花传媒剧在线mv免费观看| 亚洲熟妇无码另类久久久| 亚洲大尺度无码无码专线一区| 日韩在线视频免费看| 91亚洲性爱在线视频| 久久久久久成人毛片免费看| 亚洲色偷偷综合亚洲AV伊人| 日韩精品无码免费专区午夜不卡 | 国产成人免费福利网站| 91亚洲精品自在在线观看| 午夜男人一级毛片免费| 91亚洲一区二区在线观看不卡 | 99久久精品免费视频| 伊人婷婷综合缴情亚洲五月| 国产精品亚洲va在线观看| 最近中文字幕免费mv视频8| 久久亚洲AV无码精品色午夜| 妞干网在线免费观看| 中文字幕在线视频免费观看| 波多野结衣一区二区免费视频|