Java ASM

前言

除了JavaParser另一种可以用来分析Java代码的工具。


安装依赖

通过maven下载依赖:

1
2
3
4
5
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>9.3</version>
</dependency>

试用

写一个ClassVisitor用于访问类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class MyClassVisitor extends ClassVisitor {
public MyClassVisitor(int api) {
super(api);
}

@Override
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
System.out.println(version);
System.out.println(access);
System.out.println(name);
System.out.println(signature);
System.out.println(superName);
System.out.println(Arrays.toString(interfaces));
super.visit(version, access, name, signature, superName, interfaces);
}
}

然后随便找一个类来测试:

1
2
3
4
5
6
7
try {
ClassReader classReader = new ClassReader("java.util.HashMap");
ClassVisitor classVisitor = new MyClassVisitor(Opcodes.ASM6);
classReader.accept(classVisitor, ClassReader.EXPAND_FRAMES);
}catch (Exception e) {
e.printStackTrace();
}

解析结果:

1
2
3
4
5
6
52
33
java/util/HashMap
<K:Ljava/lang/Object;V:Ljava/lang/Object;>Ljava/util/AbstractMap<TK;TV;>;Ljava/util/Map<TK;TV;>;Ljava/lang/Cloneable;Ljava/io/Serializable;
java/util/AbstractMap
[java/util/Map, java/lang/Cloneable, java/io/Serializable]

可以获取该类父类接口之类的信息。

分析


参考


Java ASM
http://yoursite.com/2022/09/16/Java-ASM/
作者
Aluvion
发布于
2022年9月16日
许可协议