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

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

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

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    Java中的動態代理模式

     前言:
      最近一直在分析hadoop的RPC機制。在hadoop中,DataNode和NameNode之間的控制信息的交流是通過RPC機制完成的,采用的是動態代理和java NIO的方式。DataNode端是通過獲得NameNode的代理,通過該代理和NameNode進行通信的,為了更好的分析hadoop的RPC機制我想先分析一下動態代理是怎么實現。下面就是動態代理的最最簡單的代碼實現,我們一起來看看吧。
      代碼如下:
    package cn.xiaolu;
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    /**
    * 動態代理類使用到了一個接口InvocationHandler和一個代理類Proxy ,這兩個類配合使用實現了動態代理的功能。
    * 那么什么是動態代理呢?
    * 我們平常說的代理類是指: 給每個具體類寫一個代理類,以后要使用某個具體類時,只要創建它的代理類的對象,然后調用代理類的方法就可以了。
    * 可是如果現在有許多的具體類,那就需要有許多的代理類才可以,這樣很顯然不合適。所以動態代理就應運而生了,我們只要寫一個類實現
    * InvocationHandler 并實現它的invoke方法,然后再用Proxy的工廠方法newProxyInstance()創建一個代理對象,這個對象同樣可以實現對具體類的代理功能。
    * 而且想代理哪個具體類,只要給Handler(以下代碼中的Invoker)的構造器傳入這個具體對象的實例就可以了。感覺是不是自己為該具體類造了一個代理類呢?呵呵~
    */
    //接口類
    interface AbstractClass {
    public void show();
    }
    // 具體類A
    class ClassA implements AbstractClass {
    @Override
    public void show() {
    // TODO Auto-generated method stub
    System.out.println("我是A類!");
    }
    }
    // 具體類B
    class ClassB implements AbstractClass {
    @Override
    public void show() {
    // TODO Auto-generated method stub
    System.out.println("我是B類!");
    }
    }
    //動態代理類,實現InvocationHandler接口
    class Invoker implements InvocationHandler {
    AbstractClass ac;
    public Invoker(AbstractClass ac) {
    this.ac = ac;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] arg)
    throws Throwable {
    //調用之前可以做一些處理
    method.invoke(ac, arg);
    //調用之后也可以做一些處理
    return null;
    }
    }
    /**
    測試
    * @author 小路
    */
    class DynamicProxyTest {
    public static void main(String[] args) {
    //創建具體類ClassB的處理對象
    Invoker invoker1=new Invoker(new ClassA());
    //獲得具體類ClassA的代理
    AbstractClass ac1 = (AbstractClass) Proxy.newProxyInstance(
    AbstractClass.class.getClassLoader(),
    new Class[] { AbstractClass.class }, invoker1);
    //調用ClassA的show方法。
    ac1.show();
    //創建具體類ClassB的處理對象
    Invoker invoker2=new Invoker(new ClassB());
    //獲得具體類ClassB的代理
    AbstractClass ac2 = (AbstractClass) Proxy.newProxyInstance(
    AbstractClass.class.getClassLoader(),
    new Class[] { AbstractClass.class }, invoker2);
    //調用ClassB的show方法。
    ac2.show();
    }
    }
      程序運行后的結果如下:
      我是A類!
      我是B類!

    posted on 2014-03-20 11:25 順其自然EVO 閱讀(254) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

    <2014年3月>
    2324252627281
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成年男女免费视频网站| 99在线免费视频| 成人午夜视频免费| 亚洲欧洲另类春色校园网站| 久久免费精品视频| 亚洲av午夜成人片精品网站| 鲁丝片一区二区三区免费| 亚洲午夜无码久久久久| 老司机精品免费视频| 国产精品亚洲片在线| 中文无码成人免费视频在线观看 | 亚洲一级毛片免费看| 97久久免费视频| 18亚洲男同志videos网站| free哆啪啪免费永久| 亚洲色欲色欲www| 国产精品免费综合一区视频| 国产成人精品亚洲一区| 久久亚洲中文字幕精品一区| 国产在线观看免费av站| 久久精品九九亚洲精品| a级成人免费毛片完整版| 免费一级毛片在线观看| 国产成年无码久久久免费| 亚洲电影在线播放| 好男人www免费高清视频在线| 亚洲乱码在线卡一卡二卡新区 | 亚洲国产精品一区二区第四页| 九九免费观看全部免费视频| 亚洲国产精品无码专区在线观看| 中文字幕视频免费| 国产成人亚洲精品播放器下载| 亚洲中文字幕不卡无码| 成人福利免费视频| 又硬又粗又长又爽免费看| 亚洲精品视频专区| 免费观看四虎精品国产永久| 中文字幕av免费专区| 亚洲fuli在线观看| 亚洲人妻av伦理| 可以免费看的卡一卡二|