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基礎
          主站蜘蛛池模板: 二手房| 东乌珠穆沁旗| 容城县| 永年县| 堆龙德庆县| 彭山县| 化隆| 嵊州市| 银川市| 盐山县| 承德市| 黄山市| 石门县| 肇庆市| 句容市| 同江市| 石家庄市| 无极县| 始兴县| 云阳县| 卓资县| 绍兴市| 商南县| 古丈县| 彭水| 大名县| 安丘市| 柯坪县| 饶平县| 鄯善县| 黑河市| 日照市| 永登县| 乌鲁木齐市| 襄城县| 平顶山市| 平南县| 鲁甸县| 西充县| 宜城市| 莲花县|