Java ASM系列:(033)asm-util和asm-commons

2021/7/4 1:21:25

本文主要是介绍Java ASM系列:(033)asm-util和asm-commons,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文属于[Java ASM系列一:Core API](https://blog.51cto.com/lsieun/2924583)当中的一篇。 ## 1. asm-util 在`asm-util.jar`当中,主要介绍`CheckClassAdapter`和`TraceClassVisitor`类。在`TraceClassVisitor`类当中,会涉及到`Printer`、`ASMifier`和`Textifier`类。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210703/1625323958764266.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) - 其中,`CheckClassAdapter`类,主要负责检查(Check)生成的`.class`文件内容是否正确。 - 其中,`TraceClassVisitor`类,主要负责将`.class`文件的内容打印成文字输出。根据输出的文字信息,可以探索或追踪(Trace)`.class`文件的内部信息。 ## 2. asm-commons 在`asm-commons.jar`当中,包括的类比较多,我们就不一一介绍每个类的作用了。但是,我们可以这些类可以分成两组,一组是`ClassVisitor`的子类,另一组是`MethodVisitor`的子类。 - 其中,`ClassVisitor`的子类有`Cla***emapper`、`StaticInitMerger`和`SerialVersionUIDAdder`类; - 其中,`MethodVisitor`的子类有`LocalVariablesSorter`、`GeneratorAdapter`、`AdviceAdapter`、`AnalyzerAdapter`和`InstructionAdapter`类。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210703/1625323993793949.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) 那么,**asm-util.jar**与**asm-commons.jar**有什么区别呢?在`asm-util.jar`里,它提供的是通用性的功能,没有特别明确的应用场景;而在`asm-commons.jar`里,它提供的功能,都是为解决某一种特定场景中出现的问题而提出的解决思路。 --- 再回顾,我有一个编程的习惯:在编写ASM代码的时候,如果写了一个类,它继承自`ClassVisitor`,那么就命名成`XxxVisitor`;如果写了一个类,它继承自`MethodVisitor`,那么就命名成`XxxAdapter`。通过类的名字,我就可以区分出哪些类是继承自`ClassVisitor`,哪些类是继承自`MethodVisitor`。 其实,将`MethodVisitor`类的子类命名成`XxxAdapter`就是参考了`GeneratorAdapter`、`AdviceAdapter`、`AnalyzerAdapter`和`InstructionAdapter`类的名字。但是,`CheckClassAdapter`类是个例外,它是继承自`ClassVisitor`类。 --- ## 3. 总结 本文对`asm-util.jar`和`asm-commons.jar`进行介绍,内容总结如下: - 第一点,在`asm-util.jar`和`asm-commons.jar`当中,有哪些主要类成员。 - 第二点,`asm-util.jar`和`asm-commons.jar`两者有什么区别。

这篇关于Java ASM系列:(033)asm-util和asm-commons的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程