Java動態代理機制詳解(JDK 和CGLIB,Javassist,ASM)

動態代理的原理java

javasist——>方式 框架

    1.   獲取 RealSubject上的全部接口列表;
    2.   肯定要生成的代理類的類名,默認爲:com.sun.proxy.$ProxyXXXX ;ui

    3.   根據須要實現的接口信息,在代碼中動態建立 該Proxy類的字節碼;lua

    4 .  將對應的字節碼轉換爲對應的class 對象;.net

    5.   建立InvocationHandler 實例handler,用來處理Proxy全部方法調用;代理

    6.   Proxy 的class對象 以建立的handler對象爲參數,實例化一個proxy對象對象

cglib 建立某個類A的動態代理類的模式是:blog

1.   查找A上的全部非final 的public類型的方法定義;接口

2.   將這些方法的定義轉換成字節碼;文檔

3.   將組成的字節碼轉換成相應的代理的class對象;

4.   實現 MethodInterceptor接口,用來處理 對代理類上全部方法的請求(這個接口和JDK動態代理InvocationHandler的功能和角色是同樣的)

Java字節碼生成開源框架介紹--ASM

ASM 是一個 Java 字節碼操控框架。它可以以二進制形式修改已有類或者動態生成類。ASM 能夠直接產生二進制 class 文件,也能夠在類被加載入 Java 虛擬機以前動態改變類行爲。ASM 從類文件中讀入信息後,可以改變類行爲,分析類信息,甚至可以根據用戶要求生成新類。

不過ASM在建立class字節碼的過程當中,操縱的級別是底層JVM的彙編指令級別,這要求ASM使用者要對class組織結構和JVM彙編指令有必定的瞭解。

 

參考文檔 

https://blog.csdn.net/luanlouis/article/details/24589193

相關文章
相關標籤/搜索