<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
    簡單,明了  回復  更多評論
      
    主站蜘蛛池模板: 国产精品亚洲高清一区二区| 日本激情猛烈在线看免费观看| 久久久精品国产亚洲成人满18免费网站| 亚洲精品成人片在线观看精品字幕| 天堂在线免费观看中文版| 97公开免费视频| 波多野结衣免费一区视频| 亚洲日韩在线观看免费视频| 在线观看亚洲专区| 亚洲国产成人久久精品大牛影视 | 欧美亚洲国产SUV| 亚洲av产在线精品亚洲第一站| 日木av无码专区亚洲av毛片| 亚洲国产精品无码专区影院| 亚洲真人日本在线| 亚洲中文无韩国r级电影| 亚洲va在线va天堂成人| 久久久亚洲欧洲日产国码是AV| 亚洲精品无码不卡在线播HE| 亚洲国产精品成人| 免费国内精品久久久久影院| 国产jizzjizz免费视频| 免费高清小黄站在线观看| 午夜男人一级毛片免费| 成人免费一区二区三区在线观看| 免费国产作爱视频网站| 在线观看免费人成视频色| 成人无码区免费视频观看| 免费无码又黄又爽又刺激| 欧美大尺寸SUV免费| 成人免费无遮挡无码黄漫视频| 国外成人免费高清激情视频| 成人毛片18女人毛片免费96| 男人的好看免费观看在线视频| 丁香花免费高清视频完整版| 91在线视频免费播放| 日本高清免费中文字幕不卡| 国产成人高清精品免费软件| mm1313亚洲国产精品美女| 久久久久国产免费| 免费播放一区二区三区|