看了下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 閱讀(400) 評論(0)  編輯  收藏


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


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

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          boddiy

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 五指山市| 华蓥市| 镇宁| 马鞍山市| 鹤山市| 江阴市| 盈江县| 嘉鱼县| 朝阳区| 湟中县| 新乡县| 乳源| 新疆| 资溪县| 绵竹市| 饶阳县| 周宁县| 同江市| 南充市| 济源市| 壤塘县| 聂拉木县| 普兰县| 巨鹿县| 赤峰市| 新竹市| 安国市| 罗甸县| 开远市| 沾化县| 盐城市| 临安市| 泸西县| 唐海县| 尉犁县| 利津县| 北海市| 元氏县| 沛县| 南昌市| 昭平县|