<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 45, 文章 - 6, 評論 - 4, 引用 - 0
    數據加載中……

    java動態代理實例

    1.真實對象接口
    1 public interface IAnimal {
    2     void info();
    3 }

    2.真實類
    1 public class Cat implements IAnimal{
    2 
    3     public void info() {
    4         System.out.println("This is a cat!");
    5     }
    6 
    7 }

    3.調用處理器
     1 import java.lang.reflect.InvocationHandler;
     2 import java.lang.reflect.Method;
     3 
     4 public class TraceHandler implements InvocationHandler{
     5     
     6     private Object target;//以真實角色作為代理角色的屬性
     7     
     8     //構造器
     9     public TraceHandler(Object target) {   
    10         this.target = target;   
    11     }   
    12 
    13     /*
    14      * 通過反射機制動態執行真實角色的每一個方法
    15      */
    16     public Object invoke(Object proxy, Method method, Object[] args)
    17             throws Throwable {
    18         try {
    19             System.out.println("被攔截的方法:" + method.getName()); 
    20             System.out.println("預處理.");
    21             
    22             return method.invoke(target, args);//調用真是對象的method方法
    23             
    24         } catch (Exception e) {
    25             return null;
    26         } finally {
    27              System.out.println("善后處理.");
    28         }
    29     }
    30 }

    4.客戶端
     1 import java.lang.reflect.InvocationHandler;
     2 import java.lang.reflect.Proxy;
     3 
     4 public class ProxyTest {
     5     public static void main(String[] args) {
     6         
     7         //真實對象(即被代理對象)
     8         final IAnimal animal = new Cat();
     9         
    10         //為真實對象制定一個調用處理器
    11         InvocationHandler handler = new TraceHandler(animal);
    12         
    13         //獲得真實對象(animal)的一個代理類 ★★★★★
    14         Object proxyObj = Proxy.newProxyInstance(
    15                 animal.getClass().getClassLoader(), //真實對象的類加載器
    16                 animal.getClass().getInterfaces(),  //真實對象實現的所有接口
    17                 handler                                //真實對象的處理器
    18                 );
    19          
    20          if (proxyObj instanceof IAnimal) {
    21             System.out.println("the proxyObj is an animal!");
    22             
    23             IAnimal animalProxy = (IAnimal)proxyObj;//proxyObj與animal都實現了IAnimal接口
    24             
    25             animalProxy.info();//像普通animal對象一樣使用(通過handler的invoke方法執行)
    26         } else {
    27             System.out.println("the proxyObj isn't an animal!");
    28         }
    29     }
    30 }

    posted on 2009-10-24 21:44 liyang 閱讀(2599) 評論(0)  編輯  收藏 所屬分類: design pattern


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲youwu永久无码精品| 日本一卡精品视频免费| 亚洲人成网站影音先锋播放| 91精品免费不卡在线观看| 亚洲一区二区三区丝袜| 超pen个人视频国产免费观看| 亚洲最新视频在线观看| 免费观看无遮挡www的小视频| 无码日韩人妻AV一区免费l | 久热综合在线亚洲精品| 四虎永久免费网站免费观看| 99久久久国产精品免费无卡顿| jizz免费一区二区三区| 男男gay做爽爽的视频免费| 亚洲va成无码人在线观看| 97se亚洲综合在线| 亚洲国产天堂久久综合网站| 亚洲五月综合缴情在线观看| 免费**毛片在线播放直播| 国产一级理论免费版| 亚洲高清偷拍一区二区三区 | 亚洲第一男人天堂| 亚洲理论片在线观看| 亚洲午夜电影在线观看| 亚洲国产超清无码专区| 亚洲精品中文字幕无码AV| 亚洲国产精品成人精品小说| 亚洲成a人片在线观看中文!!! | 无码成A毛片免费| 天天影视色香欲综合免费| 久九九精品免费视频| 高清国语自产拍免费视频国产| 免费国产在线观看| 亚洲线精品一区二区三区影音先锋 | 中文字幕无码免费久久9一区9| 免费看黄的成人APP| 精品国产污污免费网站aⅴ | 久久精品亚洲男人的天堂| 亚洲女同成av人片在线观看| 亚洲AV成人精品网站在线播放| 亚洲AV无码乱码在线观看代蜜桃|