java 動態代理學習(Proxy,InvocationHandler)

來源:互聯網
上載者:User
前幾天看到java的動態代理機制,不知道是啥玩意,然後看了看。死活不知道 
invoke(Object proxy, Method m, Object[] args)種的proxy是個什麼東西,放在這裡有什麼用。於是網上到處搜刮,把自己的理解寫了寫。 
Java代碼   /**   * 相親介面   *    * @author zhengt   * @time Jun 3, 2095 3:13:03 PM   */   public interface XiangQinInterface {       /**       * 相親方法       */       public void xiangQin();   }   /**   * 張三相親實作類別   *    * @author zhengt   * @time Jun 3, 2095 3:14:48 PM   */   public class ZhangSanXiangQinInterfaceImpl implements XiangQinInterface {       public void xiangQin() {           System.out.println("張三去相親,娶個漂亮老婆。");       }   }   import java.lang.reflect.InvocationHandler;   import java.lang.reflect.Method;      /**   * 相親可是一輩子的大事,相親前要準備一下,打扮得帥氣些。   *    * @author zhengt   * @time Jun 3, 2095 3:15:48 PM   */   public class ReadyInvocationHandler implements InvocationHandler {       //相親介面的實作類別,也就是張三相親類       private Object zhangSan = null;          public ReadyInvocationHandler(Object realSubject) {           this.zhangSan = realSubject;       }          public Object invoke(Object proxy, Method m, Object[] args) {           Object result = null;           try {               /**               * 動態代理類$Proxy0調用xiangQin方法時會調用它自己的xiangQin方法,               * 而它自己的xiangQin方法裡面調用的是super.h.invoke(this, , ),也就是父類Proxy的h的invoke方法,               * 也就是ReadyInvocationHandler類的invoke方法。               * 所以,invoke(Object proxy, Method m, Object[] args)種的proxy實際上就是動態代理類$Proxy0,               * 如果你將其強轉成XiangQinInterface然後調用它的xiangQin方法,然後它就會調用super.h.invoke(this, , ),這樣就會死迴圈。               */               /**               * 網上關於這裡最多問題就是Object proxy放在這裡用來做什麼呢。這個我也不知道,               * 不過至少我們知道它到底是個什麼東西,具體做什麼用嘛就不得而知了               */               System.out.println(proxy.getClass().getSimpleName());               System.out.println("張三相親前,代理人給他打扮了打扮。");               result = m.invoke(zhangSan, args);           } catch (Exception ex) {               System.exit(1);           }           return result;       }   }   import java.lang.reflect.InvocationHandler;   import java.lang.reflect.Method;   import java.lang.reflect.Proxy;      /**   * 張三來到了婚介所(相親現場),開始相親。   *    * @author zhengt   * @time Jun 3, 2095 3:17:16 PM   */   public class HunJieSuo {       public static void main(String args[]) {           //先將張三相親這個相親的實作類別執行個體化,也就是得到XiangQinInterface介面的一個執行個體對象         &nb

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.