vista

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

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

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


          實現(xiàn)類:
          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 閱讀(1665) 評論(0)  編輯  收藏 所屬分類: java基礎
          主站蜘蛛池模板: 荆州市| 米脂县| 新竹县| 常德市| 定西市| 西峡县| 浑源县| 肇庆市| 教育| 稷山县| 永城市| 广州市| 正安县| 中卫市| 宜兰市| 黔南| 白城市| 博野县| 延庆县| 高雄市| 景谷| 上蔡县| 德令哈市| 福海县| 荣昌县| 涟源市| 靖宇县| 博乐市| 宜良县| 江都市| 昭苏县| 大竹县| 德钦县| 井冈山市| 五家渠市| 体育| 卢氏县| 金阳县| 绥中县| 安陆市| 全州县|