最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA動態(tài)代理模式(從現(xiàn)實生活角度理解代碼原理)

 更新時間:2017年03月14日 10:21:29   作者:潘侯爺  
本文主要介紹了JAVA動態(tài)代理模式(從現(xiàn)實生活角度理解代碼原理)的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧

所謂動態(tài)代理,即通過代理類:Proxy的代理,接口和實現(xiàn)類之間可以不直接發(fā)生聯(lián)系,而可以在運行期(Runtime)實現(xiàn)動態(tài)關(guān)聯(lián)。

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

InvocationHandler類

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

其中第一個參數(shù) obj 指的是代理類,method是被代理的方法,obs是指被代理的方法的參數(shù)組。此方法由代理類來實現(xiàn)。

Proxy類

protectedProxy(InvocationHandler h);

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

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

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

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

第一步:LianJia提供房屋買賣以及互聯(lián)網(wǎng)貸款渠道方法(接口

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

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

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

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

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;
  //創(chuàng)建代理對象(根據(jù)被代理對象需求)
  public Object bind(Object target){
    this.target = target;
    //使用Proxy類創(chuàng)建一個動態(tài)代理對象
    Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    return proxy;
  }
  //具體執(zhí)行業(yè)務(wù)的方法
    /**
     * proxy: 代理類對象
     * method:被代理對象的方法
     * args:被代理對象方法的參數(shù)
     */
  public Object invoke(Object proxy, Method method, Object[] args)
      throws Throwable {
    //調(diào)用業(yè)務(wù)方法
    method.invoke(target);
    return null;
  }
}

第四步:實現(xiàn)測試類

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();
  }
}

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

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • spring boot中使用@Async實現(xiàn)異步調(diào)用任務(wù)

    spring boot中使用@Async實現(xiàn)異步調(diào)用任務(wù)

    本篇文章主要介紹了spring boot中使用@Async實現(xiàn)異步調(diào)用任務(wù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 最新評論

    马公市| 盘锦市| 东乡县| 鄯善县| 梅州市| 称多县| 台中市| 分宜县| 宁乡县| 耒阳市| 永吉县| 洪雅县| 南阳市| 全椒县| 崇仁县| 兴城市| 淮阳县| 东平县| 通化县| 黔江区| 长宁区| 黄龙县| 朝阳县| 甘洛县| 即墨市| 德化县| 桐城市| 辽阳县| 利津县| 垣曲县| 读书| 克东县| 堆龙德庆县| 济源市| 喀喇沁旗| 扬中市| 宜城市| 高安市| 海口市| 安图县| 屏南县|