asm-util
在 asm-util.jar 当中,主要介绍 CheckClassAdapter 和 TraceClassVisitor 类。在 TraceClassVisitor 类当中,会涉及到 Printer、ASMifier 和 Textifier 类。

- 其中,
CheckClassAdapter类,主要负责检查(Check)生成的.class文件内容是否正确。 - 其中,
TraceClassVisitor类,主要负责将.class文件的内容打印成文字输出。根据输出的文字信息,可以探索或追踪(Trace).class文件的内部信息。
asm-commons
在 asm-commons.jar 当中,包括的类比较多,我们就不一一介绍每个类的作用了。但是,我们可以这些类可以分成两组,一组是 ClassVisitor 的子类,另一组是 MethodVisitor 的子类。
- 其中,
ClassVisitor的子类有ClassRemapper、StaticInitMerger和SerialVersionUIDAdder类; - 其中,
MethodVisitor的子类有LocalVariablesSorter、GeneratorAdapter、AdviceAdapter、AnalyzerAdapter和InstructionAdapter类。

util 和 commons 的区别
那么,asm-util.jar与asm-commons.jar有什么区别呢?在 asm-util.jar 里,它提供的是通用性的功能,没有特别明确的应用场景;而在 asm-commons.jar 里,它提供的功能,都是为解决某一种特定场景中出现的问题而提出的解决思路。
- the
org.objectweb.asm.utilpackage, in theasm-util.jararchive, provides various tools based on the core API that can be used during the development and debuging of ASM applications.- 在
CheckClassAdapter类的代码实现中,它会依赖于org.objectweb.asm.tree和org.objectweb.asm.tree.analysis的内容。因此,asm-util.jar除了依赖 Core API 之外,也依赖于 Tree API 的内容。
- 在
- the
org.objectweb.asm.commonspackage provides several useful pre-defined class transformers, mostly based on the core API. It is contained in theasm-commons.jararchive.
在 learn-java-asm 当中,各个 Jar 包之间的依赖关系如下:

由上图,我们可以看到:asm-util.jar 和 asm-commons.jar 两者都对 asm.jar、asm-tree.jar、asm-analysis.jar 有依赖。

编程习惯
在编写 ASM 代码的过程中,我经常遵循一个命名的习惯:如果添加一个新的类,它继承自 ClassVisitor,那么就命名成 XxxVisitor;如果添加一个新的类,它继承自 MethodVisitor,那么就命名成 XxxAdapter。通过类的名字,我们就可以区分出哪些类是继承自 ClassVisitor,哪些类是继承自 MethodVisitor。
其实,将 MethodVisitor 类的子类命名成 XxxAdapter 就是参考了 GeneratorAdapter、AdviceAdapter、AnalyzerAdapter 和 InstructionAdapter 类的名字。但是,CheckClassAdapter 类是个例外,它是继承自 ClassVisitor 类。
总结
本文对 asm-util.jar 和 asm-commons.jar 进行介绍,内容总结如下:
- 第一点,在
asm-util.jar和asm-commons.jar当中,有哪些主要类成员。 - 第二点,
asm-util.jar和asm-commons.jar两者有什么区别。