看了下java核心技術中的代理,還是很暈

          需要記住的東東:
             1.代理類是在程序運行過程中創建的,一旦創建就變成了常規類,與虛擬機種的任何其他類沒有什么區別.
            2.所有的代理類都擴展于Proxy類,一個代理類只有一個實例變量--調用處理器,它定義在Proxy的超類中,為了履行代理對象的職責,所需要的任何附加數據都必須存儲在調用處理器中.
             3.所有的代理類都覆蓋了Object中的toString,equals和hashCode,如何所有的代理方法一樣,這些方法僅僅調用了調用處理器的invoke.Object中的其他方法clone,getClass沒有被重新定義.

          感覺就是把原來的方法,拿到代理類里面執行,在執行前后可以加入自己的代碼而已,spring的IOC就是這樣的.
          例子:

          import java.lang.reflect.*;
          import java.util.*;

          public class PorxyTest {

           /**
            * @param args
            */
           public static void main(String[] args) {
            // TODO Auto-generated method stub
            Object[] elements = new Object[1000];
            
            for (int i = 0; i < elements.length; i ++) {
             Integer value = i + 1;
             Class[] interfaces = value.getClass().getInterfaces();
             InvocationHandler handler = new TraceHandler(value);
             Object proxy = Proxy.newProxyInstance(null, interfaces, handler);
             elements[i] = proxy;
            }
            Integer key = new Random().nextInt(elements.length) + 1;
            int result = Arrays.binarySearch(elements, key);
            
            if (result >= 0)
             System.out.println(elements[result]);
           }

          }

          class TraceHandler implements InvocationHandler {
           private Object target;
           public TraceHandler(Object t) {
            target = t;
           }
           
           public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
            System.out.print(target);
            System.out.print("." + m.getName() + "(");
            if (args != null) {
             for (int i = 0; i < args.length; i ++) {
              System.out.print(args[i]);
              if (i < args.length - 1) {
               System.out.print(",");
              }
             }
            }
            System.out.println(")");
            return m.invoke(target, args);
           }
          }

          posted on 2007-05-24 14:57 liujg 閱讀(396) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          boddiy

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁晋县| 木兰县| 遂宁市| 万宁市| 册亨县| 柞水县| 磴口县| 滕州市| 连平县| 鹿邑县| 涡阳县| 类乌齐县| 家居| 韶山市| 乌审旗| 湛江市| 容城县| 化州市| 商南县| 霍山县| 皋兰县| 翁牛特旗| 鲁山县| 曲水县| 哈密市| 博野县| 保康县| 长宁县| 八宿县| 和田市| 中超| 额尔古纳市| 商洛市| 亚东县| 朔州市| 加查县| 垦利县| 西丰县| 阜城县| 武定县| 天门市|