vista

          回顧※展望                     潛心技術&&不再擱淺

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            12 Posts :: 1 Stories :: 13 Comments :: 0 Trackbacks
          這個知識點不多,但屬于java的高級技術,相信熟悉SPRING的朋友對它一定不會陌生,今天花了點時間對java的動態代理進行了學習,感覺還可以,因為是結合spring來看的,所以練習的是面向接口的代理模式,但應該也是最常用的動態代理..,廢話不多說,看例子:
          package?org.diego;

          public?interface?Ip?{
          ????
          public?void?say();
          }


          實現類:
          package?org.diego;

          public?class?P?implements?Ip{
          ????
          public?void?say(){
          ????????System.out.println(
          "hello");
          ????}

          }


          代理類:

          package?org.diego;

          import?java.lang.reflect.InvocationHandler;
          import?java.lang.reflect.Method;

          class?TraceHandler?implements?InvocationHandler?{
          ????
          private?Object?target;

          ????
          public?TraceHandler(Object?t)?{
          ????????target?
          =?t;
          ????}


          ????
          public?Object?invoke(Object?proxy,?Method?method,?Object[]?args)?throws?Throwable?{
          ????????
          //?TODO?Auto-generated?method?stub
          ????????if?(method.getName().startsWith("say"))?{
          ????????????System.out.println(
          "hello,before?method");
          ????????????Object?result?
          =?method.invoke(target,?args);
          ????????????System.out.println(
          "World,after?method");
          ????????????
          return?result;
          ????????}

          ????????
          return?null;
          ????????
          ????}

          }


          測試類:
          /*
          ?*?@author?diego.liu
          ?*?@contact?vista.lbw@gmail.com
          ?*?@date?2006-11-7
          ?
          */

          package?org.diego;

          import?java.lang.reflect.InvocationHandler;
          import?java.lang.reflect.Proxy;

          public?class?ProxyTest?{

          ????
          public?static?void?main(String[]?args)?{
          ????????P?test?
          =?new?P();
          ????????InvocationHandler?handler?
          =?new?TraceHandler(test);
          ????????Ip?proxy?
          =?(Ip)?Proxy.newProxyInstance(test.getClass().getClassLoader(),?test.getClass().getInterfaces(),
          ????????????????handler);
          ????????proxy.say();
          ????}


          }


          已經測試可以運行,歡迎拍磚。。。
          posted on 2006-11-07 18:14 Vista 閱讀(1667) 評論(0)  編輯  收藏 所屬分類: java基礎
          主站蜘蛛池模板: 建德市| 淅川县| 哈巴河县| 西丰县| 清丰县| 岢岚县| 南投市| 泗洪县| 确山县| 抚顺县| 雷州市| 礼泉县| 葵青区| 凉山| 兴安盟| 河间市| 包头市| 石楼县| 高陵县| 海丰县| 锦屏县| 九寨沟县| 赤壁市| 杭州市| 黄陵县| 临江市| 石家庄市| 昌吉市| 平阴县| 罗平县| 娱乐| 台江县| 湾仔区| 邢台市| 四川省| 镇宁| 沿河| 普洱| 加查县| 昌都县| 博野县|