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

jdk動(dòng)態(tài)代理源碼分析過(guò)程

 更新時(shí)間:2019年08月15日 11:37:10   作者:yongan  
這篇文章主要介紹了jkd動(dòng)態(tài)代理源碼分析過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

代理對(duì)象的生成方法是:

Proxy.newProxyInstance(...) ,進(jìn)入這個(gè)方法內(nèi)部,一步一步往下走會(huì)發(fā)現(xiàn)會(huì)調(diào)用

ProxyGenerator.generateProxyClass() ,這個(gè)方法用來(lái)生成代理類的字節(jié)碼。

下面通過(guò)調(diào)用 ProxyGenerator.generateProxyClass()方法在本地生成代理類。

1.首先要有一個(gè)接口

2.生成代理類的方法如下

3.將生成的代理類導(dǎo)入到idea中查看是長(zhǎng)這樣

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

import com.example.springboottest.config.OrderService;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.lang.reflect.UndeclaredThrowableException;

protected static class $OrderService extends Proxy implements OrderService {
  private static Method m1;
  private static Method m3;
  private static Method m2;
  private static Method m0;

  public $OrderService(InvocationHandler var1) throws {
    super(var1);
  }

  public final boolean equals(Object var1) throws {
    try {
      return (Boolean)super.h.invoke(this, m1, new Object[]{var1});
    } catch (RuntimeException | Error var3) {
      throw var3;
    } catch (Throwable var4) {
      throw new UndeclaredThrowableException(var4);
    }
  }

  public final void query() throws {
    try {
      super.h.invoke(this, m3, (Object[])null);
    } catch (RuntimeException | Error var2) {
      throw var2;
    } catch (Throwable var3) {
      throw new UndeclaredThrowableException(var3);
    }
  }

  public final String toString() throws {
    try {
      return (String)super.h.invoke(this, m2, (Object[])null);
    } catch (RuntimeException | Error var2) {
      throw var2;
    } catch (Throwable var3) {
      throw new UndeclaredThrowableException(var3);
    }
  }

  public final int hashCode() throws {
    try {
      return (Integer)super.h.invoke(this, m0, (Object[])null);
    } catch (RuntimeException | Error var2) {
      throw var2;
    } catch (Throwable var3) {
      throw new UndeclaredThrowableException(var3);
    }
  }

  static {
    try {
      m1 = Class.forName("java.lang.Object").getMethod("equals", Class.forName("java.lang.Object"));
      m3 = Class.forName("com.example.springboottest.config.OrderService").getMethod("query");
      m2 = Class.forName("java.lang.Object").getMethod("toString");
      m0 = Class.forName("java.lang.Object").getMethod("hashCode");
    } catch (NoSuchMethodException var2) {
      throw new NoSuchMethodError(var2.getMessage());
    } catch (ClassNotFoundException var3) {
      throw new NoClassDefFoundError(var3.getMessage());
    }
  }
}

可以發(fā)現(xiàn)在代理類中的構(gòu)造方法中傳入了我們實(shí)現(xiàn)的InvocationHandler,在調(diào)用方法時(shí)會(huì)回調(diào)invoke方法。

還可以發(fā)現(xiàn)代理類中繼承了Proxy,由于java中是單繼承的,所以java動(dòng)態(tài)代理是針對(duì)接口的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實(shí)現(xiàn)二叉樹(shù)的創(chuàng)建及5種遍歷方法(總結(jié))

    java實(shí)現(xiàn)二叉樹(shù)的創(chuàng)建及5種遍歷方法(總結(jié))

    下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)二叉樹(shù)的創(chuàng)建及5種遍歷方法(總結(jié))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • MybatisPlus中的insert操作詳解

    MybatisPlus中的insert操作詳解

    這篇文章主要介紹了MybatisPlus中的insert操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • idea創(chuàng)建maven父子工程導(dǎo)致子工程無(wú)法導(dǎo)入父工程依賴

    idea創(chuàng)建maven父子工程導(dǎo)致子工程無(wú)法導(dǎo)入父工程依賴

    創(chuàng)建maven父子工程時(shí)遇到一個(gè)問(wèn)題,本文主要介紹了idea創(chuàng)建maven父子工程導(dǎo)致子工程無(wú)法導(dǎo)入父工程依賴,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java資源緩存 之 LruCache

    Java資源緩存 之 LruCache

    LruCache (此類在android-support-v4的包中提供) 這個(gè)類非常適合用來(lái)緩存圖片,它的主要算法原理是把最近使用的對(duì)象用強(qiáng)引用存儲(chǔ)在 LinkedHashMap 中,并且把最近最少使用的對(duì)象在緩存值達(dá)到預(yù)設(shè)定值之前從內(nèi)存中移除。
    2016-08-08
  • 淺談?dòng)肧pringBoot實(shí)現(xiàn)策略模式

    淺談?dòng)肧pringBoot實(shí)現(xiàn)策略模式

    本文主要介紹了SpringBoot實(shí)現(xiàn)策略模式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Spring和Mybatis整合的原理詳解

    Spring和Mybatis整合的原理詳解

    這篇文章主要介紹了Spring和Mybatis整合的原理詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • SpringBoot整合Mybatis-Plus實(shí)現(xiàn)關(guān)聯(lián)查詢

    SpringBoot整合Mybatis-Plus實(shí)現(xiàn)關(guān)聯(lián)查詢

    Mybatis-Plus(簡(jiǎn)稱MP)是一個(gè)Mybatis的增強(qiáng)工具,只是在Mybatis的基礎(chǔ)上做了增強(qiáng)卻不做改變,MyBatis-Plus支持所有Mybatis原生的特性,本文給大家介紹了SpringBoot整合Mybatis-Plus實(shí)現(xiàn)關(guān)聯(lián)查詢,需要的朋友可以參考下
    2024-08-08
  • Spring高級(jí)之注解@PropertySource的原理

    Spring高級(jí)之注解@PropertySource的原理

    這篇文章主要介紹了Spring高級(jí)之注解@PropertySource的原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java移除無(wú)效括號(hào)的方法實(shí)現(xiàn)

    Java移除無(wú)效括號(hào)的方法實(shí)現(xiàn)

    本文主要介紹了Java移除無(wú)效括號(hào)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 淺談Java多進(jìn)程程序的運(yùn)行模式

    淺談Java多進(jìn)程程序的運(yùn)行模式

    這篇文章主要介紹了淺談Java多進(jìn)程程序的運(yùn)行模式,包括對(duì)進(jìn)程阻塞問(wèn)題的討論等,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

和政县| 乐清市| 威信县| 乡城县| 老河口市| 连云港市| 普陀区| 辽阳市| 苍梧县| 邯郸市| 宁国市| 古交市| 新和县| 乐都县| 新邵县| 年辖:市辖区| 原平市| 德惠市| 临邑县| 临潭县| 贺州市| 娄底市| 腾冲县| 鹤庆县| 富裕县| 历史| 景宁| 长垣县| 文水县| 同仁县| 德格县| 安国市| 石柱| 高碑店市| 噶尔县| 东光县| 砚山县| 渝北区| 邢台市| 牙克石市| 贡觉县|