前言
除了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]
|
可以获取该类父类接口之类的信息。
分析
参考