中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入淺析JAVA中動態代理模式的原理

發布時間:2020-11-11 16:58:57 來源:億速云 閱讀:129 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關深入淺析JAVA中動態代理模式的原理,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

所謂動態代理,即通過代理類:Proxy的代理,接口和實現類之間可以不直接發生聯系,而可以在運行期(Runtime)實現動態關聯。

java動態代理主要是使用java.lang.reflect包中的兩個類。

InvocationHandler類

public Object invoke(Object obj,Method method,Object[] obs)

其中第一個參數 obj 指的是代理類,method是被代理的方法,obs是指被代理的方法的參數組。此方法由代理類來實現。

Proxy類

protectedProxy(InvocationHandler h);

staticClass getProxyClass(ClassLoader loader,Class[] interfaces);

staticObject newProxyInstance(ClassLoader loader,Class[]interfaces,InvocationHandlerh);

動態代理其實是在運行時生成class,所以,我們必須提供一組interface,然后告訴他class已經實現了這些interface,而且在生成Proxy的時候,必須給他提供一個handler,讓他來接管實際的工作。

同樣的在開始代碼實現之前,我們還是要講一下關于鏈家的故事,之前靜態代理模式中提到鏈家(接口)有賣二手房的業務,公司有一大批售房精英(靜態代理),但現在互聯網金融這塊發展勢頭迅猛,鏈家也想插一腳進去,但苦于沒有相關人才(代理)儲備,這時公司便有了從相關的人才市場(動態代理“工廠”)尋找專業人才實現此類業務的想法,人才市場,顧名思義,就是根據企業(接口)的某種需求(被代理的方法)尋找有相關技能的人才。下面開始動態代理的實現代碼:

第一步:LianJia提供房屋買賣以及互聯網貸款渠道方法(接口

 interface LianJia {
   public void sellHouse();
   public void loan();
 }

第二步:我們的房主不僅要賣房也要貸款做其他事情(市場需求)得知鏈家有這個業務所以他又找到了鏈家(被代理對象

public class HouseMaster implements LianJia {
  @Override
  public void sellHouse() {
    System.out.println("我有房子要賣");
  }
  @Override
  public void loan() {
    System.out.println("我要貸款做生意");
  }
}

第三步:這里是浩瀚的人才市場,你想要的這里都有(生成動態代理的類

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class CreatProxy implements InvocationHandler{
  //聲明被代理對象(之所以用Object是因為他在Java中是所有類包含自定義類的超類)
  private Object target;
  //創建代理對象(根據被代理對象需求)
  public Object bind(Object target){
    this.target = target;
    //使用Proxy類創建一個動態代理對象
    Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    return proxy;
  }
  //具體執行業務的方法
    /**
     * proxy: 代理類對象
     * method:被代理對象的方法
     * args:被代理對象方法的參數
     */
  public Object invoke(Object proxy, Method method, Object[] args)
      throws Throwable {
    //調用業務方法
    method.invoke(target);
    return null;
  }
}

第四步:實現測試類

public class Test {
  public static void main(String[] args) {
    HouseMaster hm = new HouseMaster();
    CreatProxy cp = new CreatProxy();
    LianJia lj = (LianJia) cp.bind(hm);
    lj.sellHouse();
    lj.loan();
  }
}

我們也發現從靜態代理到動態代理整個過程中發現,被代理對象(市場需求)會隨時變化,企業(接口)也必須啟用動態代理模式才可應對市場變化(個人認為富士康就屬于一個大的電子類動態代理工廠,而蘋果谷歌等企業則為市場需求的締造者與規則(接口)的)。

上述就是小編為大家分享的深入淺析JAVA中動態代理模式的原理了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

资源县| 汶川县| 武川县| 英德市| 荥阳市| 综艺| 平舆县| 新昌县| 牟定县| 望江县| 剑河县| 读书| 商城县| 金川县| 关岭| 通河县| 湖北省| 夹江县| 永寿县| 临潭县| 玉门市| 白水县| 绥阳县| 比如县| 元阳县| 广汉市| 昭觉县| 大余县| 沭阳县| 轮台县| 微山县| 延庆县| 同德县| 泽库县| 定陶县| 阳高县| 库尔勒市| 平昌县| 庆元县| 铁岭市| 武强县|