<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


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品在线视频观看| 久久精品九九亚洲精品| 亚洲成av人无码亚洲成av人| 国产高清免费视频| 亚洲免费观看在线视频| 在线看片无码永久免费视频| 亚洲13又紧又嫩又水多| 免费观看的av毛片的网站| 亚洲中文无码卡通动漫野外| 久久受www免费人成_看片中文| 亚洲videos| 精品免费国产一区二区三区| 国产亚洲视频在线观看网址 | 亚洲一区二区三区免费观看 | 国产精品麻豆免费版| 国产精品亚洲综合| 亚洲免费在线观看| 华人在线精品免费观看| 久久久国产精品亚洲一区| 四虎永久在线精品免费网址| 337P日本欧洲亚洲大胆艺术图| 亚洲精品无码永久在线观看 | 女人18特级一级毛片免费视频| 色九月亚洲综合网| 国产亚洲综合久久系列| **aaaaa毛片免费| 亚洲欧美aⅴ在线资源| 亚洲精品国产电影| 久久国产精品免费专区| 亚洲七久久之综合七久久| 久久夜色精品国产亚洲av| 日本最新免费网站| 边摸边吃奶边做爽免费视频网站 | 亚洲一卡2卡3卡4卡乱码 在线| 日本xxwwxxww在线视频免费| 男女一进一出抽搐免费视频| 亚洲日本香蕉视频观看视频| 全黄a免费一级毛片人人爱| 久久精品免费电影| 美女被吸屁股免费网站| 久久久亚洲AV波多野结衣|