Java 字节码操纵框架 -ASM

Java 字节码操纵框架 -ASM

1.ASM 概述:

ASM 是用于 Java 字节码操纵的框架,可动态生成新类或增强现有类的功能。它既能直接产生二进制 class 文件,也能在类被加载到虚拟机之前动态改变类行为,通过读取类文件信息来分析、修改类行为,甚至生成新类。许多流行框架如 cglib、Hibernate、Spring 都直接或间接地使用 ASM 来操作字节码。

2. ASM 编程模型
  • Core API:提供基于事件形式的编程模型,不需要一次性将整个类的结构读取到内存中,所以执行速度更快,内存占用少,但编程难度较大。
  • Tree API:提供基于树形的编程模型,需要一次性将一个类的完整结构全部读取到内存中,因此内存需求较高,但编程方式相对简单。
3.ASM 的 Core API

ASM Core API 中操纵字节码的功能基于 ClassVisitor 接口,该接口中的每个方法对应 class 文件中的每一项。同时,ASM 提供了三个基于 ClassVisitor 接口的类来实现 class 文件的生成和转换:

  • ClassReader:用于解析一个类的 class 字节码。

  • ClassAdapter:是 ClassVisitor 的实现类,用于实现对类字节码要进行的变化功能。

  • ClassWriter:也是 ClassVisitor 的实现类,能够输出经过变化后的字节码。

4. ASMifier

ASM 提供了 ASMifier 工具辅助开发,可以使用该工具生成 ASM 结构以便对比分析。

mac 写法

java -cp
/l
ib/asm-7.3.1.jar:../lib/asm-uti1-7.3.1.jar org.objectweb.asm.util.AsMifier com.test.jvm.asm
Test

Windows 写法

java -cp
/l
ib/asm-7.3.1.jar;../lib/asm-uti1-7.3.1.jar org.objectweb.asm.util.AsMifier com.test.jvm.asm
Test
5. demo
5.1 添加ASM依赖

在项目中添加ASM的依赖。如果你使用的是Maven,可以在pom.xml中添加以下依赖

<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm</artifactId>
    <version>9.2</version>
</dependency>
<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm-commons</artifactId
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潇凝子潇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值