欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

InvocationHandler類

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

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

Proxy類

protectedProxy(InvocationHandler h);

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

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

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

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

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

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

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

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

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

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class CreatProxy implements InvocationHandler{
  //聲明被代理對(duì)象(之所以用Object是因?yàn)樗贘ava中是所有類包含自定義類的超類)
  private Object target;
  //創(chuàng)建代理對(duì)象(根據(jù)被代理對(duì)象需求)
  public Object bind(Object target){
    this.target = target;
    //使用Proxy類創(chuàng)建一個(gè)動(dòng)態(tài)代理對(duì)象
    Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    return proxy;
  }
  //具體執(zhí)行業(yè)務(wù)的方法
    /**
     * proxy: 代理類對(duì)象
     * method:被代理對(duì)象的方法
     * args:被代理對(duì)象方法的參數(shù)
     */
  public Object invoke(Object proxy, Method method, Object[] args)
      throws Throwable {
    //調(diào)用業(yè)務(wù)方法
    method.invoke(target);
    return null;
  }
}

第四步:實(shí)現(xiàn)測(cè)試類

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)代理到動(dòng)態(tài)代理整個(gè)過(guò)程中發(fā)現(xiàn),被代理對(duì)象(市場(chǎng)需求)會(huì)隨時(shí)變化,企業(yè)(接口)也必須啟用動(dòng)態(tài)代理模式才可應(yīng)對(duì)市場(chǎng)變化(個(gè)人認(rèn)為富士康就屬于一個(gè)大的電子類動(dòng)態(tài)代理工廠,而蘋果谷歌等企業(yè)則為市場(chǎng)需求的締造者與規(guī)則(接口)的)。

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • java UDP實(shí)現(xiàn)一個(gè)聊天工具的示例代碼

    java UDP實(shí)現(xiàn)一個(gè)聊天工具的示例代碼

    這篇文章主要介紹了java UDP實(shí)現(xiàn)一個(gè)聊天工具的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • SpringCloud實(shí)戰(zhàn)小貼士之Zuul的路徑匹配

    SpringCloud實(shí)戰(zhàn)小貼士之Zuul的路徑匹配

    這篇文章主要介紹了SpringCloud實(shí)戰(zhàn)小貼士之Zuul的路徑匹配,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 淺談java中replace()和replaceAll()的區(qū)別

    淺談java中replace()和replaceAll()的區(qū)別

    這篇文章主要介紹了java中replace()和replaceAll()的區(qū)別,兩者都是常用的替換字符的方法,感興趣的小伙伴們可以參考一下
    2015-11-11
  • Java 并發(fā)編程之線程掛起、恢復(fù)與終止

    Java 并發(fā)編程之線程掛起、恢復(fù)與終止

    這篇文章主要介紹了Java 并發(fā)編程之線程掛起、恢復(fù)與終止的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Callable實(shí)現(xiàn)多線程步驟詳解

    Callable實(shí)現(xiàn)多線程步驟詳解

    這篇文章主要介紹了Callable實(shí)現(xiàn)多線程步驟詳解,Callable是一個(gè)接口,用于實(shí)現(xiàn)多線程,與實(shí)現(xiàn)Runnable類似,但是功能更強(qiáng)大,該方法可以在任務(wù)結(jié)束后提供一個(gè)返回值,需要的朋友可以參考下
    2023-10-10
  • itext生成PDF設(shè)置頁(yè)眉頁(yè)腳的實(shí)例詳解

    itext生成PDF設(shè)置頁(yè)眉頁(yè)腳的實(shí)例詳解

    這篇文章主要介紹了itext生成PDF設(shè)置頁(yè)眉頁(yè)腳的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • IDEA SSM整合Redis項(xiàng)目實(shí)例 附源碼

    IDEA SSM整合Redis項(xiàng)目實(shí)例 附源碼

    今天給大家普及IDEA SSM整合Redis項(xiàng)目實(shí)例,包括pom.xml 配置和spring-redis.xml 配置代碼,代碼也很簡(jiǎn)單,通過(guò)項(xiàng)目實(shí)際案例能更好的幫助大家理解,需要的朋友可以參考下
    2021-06-06
  • Java Stream map, Collectors(toMap, toList, toSet, groupingBy, collectingAndThen)使用案例

    Java Stream map, Collectors(toMap, toLis

    這篇文章主要介紹了Java Stream map, Collectors(toMap, toList, toSet, groupingBy, collectingAndThen)使用案例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • java實(shí)現(xiàn)簡(jiǎn)單的英文文本單詞翻譯器功能示例

    java實(shí)現(xiàn)簡(jiǎn)單的英文文本單詞翻譯器功能示例

    這篇文章主要介紹了java實(shí)現(xiàn)簡(jiǎn)單的英文文本單詞翻譯器功能,涉及java文件讀取、字符串分割、遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Java面向?qū)ο笾橄箢?接口的那些事

    Java面向?qū)ο笾橄箢?接口的那些事

    這篇文章主要介紹了Java面向?qū)ο蠡A(chǔ):抽象類和接口,文中代碼可以幫助各位更好的理解學(xué)習(xí),有需求的小伙伴可以參考下,希望能夠給你帶來(lái)幫助
    2021-08-08

最新評(píng)論