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 閱讀(1670) 評論(0)  編輯  收藏 所屬分類: java基礎
          主站蜘蛛池模板: 昭平县| 三台县| 颍上县| 永平县| 绿春县| 韶关市| 亳州市| 吴旗县| 山阳县| 仲巴县| 罗平县| 榆树市| 河南省| 信丰县| 武宁县| 洪泽县| 榕江县| 宜章县| 威海市| 嵊泗县| 汾阳市| 永平县| 肥东县| 大化| 鄂温| 荥经县| 滕州市| 济阳县| 延庆县| 潜江市| 鄂尔多斯市| 浠水县| 苏尼特左旗| 昭通市| 扬州市| 金溪县| 韶关市| 弥渡县| 深水埗区| 武宁县| 许昌市|