java基礎回顧:動態代理

十字路口的夜景

代理,就是幫老板干事的人,例如代理賣房,代理租房等等。java代理分動態和靜態。
靜態:手動寫一個java文件,表示代理類,寫死了。
動態:jvm動態幫你新建一個class文件,你只需要寫幾行代碼就行,靈活度更高。

以深圳地主賣房子的過程為例,角色有地主,中介。地主假設為王健林,中介是一個小mm。
地主和中介都實現Business的接口,都是生意人嘛,Business的接口方法就是賣房子啦。

public interface Business {
      public void sell();
}

地主類:

public class Landlord implements Business {

    public void sell () {
        System.out .println( "I am Landlord,I sell my house" );
    }

}

中介類:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class AgencyHandler implements InvocationHandler{

    private Landlord mLandlord;

    public AgencyHandler(Landlord mLandlord){
        this.mLandlord=mLandlord;
    }
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // TODO Auto-generated method stub
        System.out.println("Boss,I has find a man want you house");
       //代理做一些預處理
        method.invoke(mLandlord, args);//地主真正賣房
        System.out.println("Boss,Congralation!");  //代理處理一些后事
        return null;
    }

}

在深圳的CBD-main函數開始交易

import java.lang.reflect.Proxy;

public class ShenZhen {

    public static void main(String[] args) {
        Landlord wangjianlin=new Landlord();  //實例化大富豪王健林
        Business mmAgency = (Business)Proxy.newProxyInstance(Business.class.getClassLoader(), wangjianlin
                .getClass().getInterfaces(), new AgencyHandler(wangjianlin));  //實例化中介mm

        System.out.println(mmAgency.getClass().getName());
        mmAgency.sell();   //mm開始賣房

    }
}

運行結果

運行結果.png

基本原理:動態生成一個字節碼class文件,表示代理類。然后執行代理類的接口方法。跟靜態代理相比,靈活度更高吧,例如接口如果新增了一個方法,代理類不用任意修改。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言## 動態代理,就是在程序運行的時候,才自動生成動態代理的字節碼class文件,并且利用這個class文件ne...
    我在等你回復可你沒回閱讀 447評論 2 9
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,981評論 19 139
  • 非洲,坦桑尼亞,乞力馬扎羅,黑人。不管是哪一個詞匯都是那樣的陌生神秘而又有種莫名的吸引力。 在坦桑尼亞呆了40天,...
    EstelleLuo閱讀 417評論 0 0
  • 獨倚窗,慵懶臥,微翠漫樓閣;粉散香殞,春來過,細雨頻頻落!怎奈我,又思量,那時花開色;憶故人,容顏錯,紅悵藍傷寞!...
    Joy_Winslet閱讀 230評論 1 2