深入淺出Java探針技術2---java字節碼生成框架ASM、Javassist和byte buddy的使用


目前Java字節碼生成框架大致有ASM、Javassist和byte buddy三種

ASM框架介紹及使用

1.ASM介紹

ASM是一種Java字節碼操控框架,能夠以二進制形式修改已有的類或是生成類,ASM可以直接生成二進制class文件也可以在類被加載入JVM之前動態改變類,只不過ASM在創建class字節碼時說底層JVM的匯編指令,需要使用者對class組織結構和JVM匯編指令有一定的了解。由於Java 類存儲在.class文件中,這些類文件中包含有:類名稱、方法、屬性及字節碼,ASM從類文件中讀入信息后改變類行為、分析類信息或者直接創建新的類。

著名的使用到ASM的案例便是lambda表達式、CGLIB動態代理類

2.ASM內容

ASM框架核心類包含

ClassReader:該類用來解析編譯過的class字節碼文件

ClassWriter:該類用來重新構建編譯后的類,比如修改類名、屬性、方法或者根據要求創建新的字節碼文件

ClassAdapter:實現了ClassVisitor接口,將對它的方法調用委托給另一個ClassVisitor對象

3.ASM使用案例

ASM使用之前需要導入jar包asm.jar,我們來通過ASM來對一個現有的類的方法進行字節碼增強,實現在方法的開頭和結尾打印日志的功能

 

Javassist及使用

1.javassist介紹

Javassit相比於ASM要簡單點,Javassit提供了更高級的API,當時執行效率上比ASM要差,因為ASM上直接操作的字節碼。功能和JDK自帶的反射功能類似,但是比反射要強大。

2.javassist內容

Javassist核心類包括

ClassPool:一個基於HashMap實現的CtClass對象容器,key上類名,value上這個類的CtClass對象

CtClass:表示一個類,可以從ClassPool中獲取

CtMethods:表示一個類的方法

CtFields:表示類中的屬性

3.javassist使用案例

Byte Buddy及使用

1.byte buddy介紹

byte buddy是一個提供了API用於生成任意Java類工具包,可以生成和修改字節碼。

2.byte buddy使用案例


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM