谈谈ASM字节码框架在Spring源码的应用
什么是ASM? 引用ASM官方的介绍: ASM是一个通用的Java字节码操作和分析框架。它可以直接以二进制形式用于修改现有类或动态生成类。ASM提供了一些常见的字节码转换和分析算法,可以从中构建定制的复杂转换和代码分析工具。ASM提供了与其他Java字节码框架类似的功能,但主要关注性能。由于它的设计和实现尽可能小,速度尽可能快,因此非常适合在动态系统中使用(当然,也可以以静态方式使用,例如在编译器中)。 说白了就是我们可以通过使用ASM框架,来读取和修改.class文件。相比JDK反射技术来说,ASM提供了更方便的字节码读取方式,性能上也更加高效。 简单了解如何使用ASM框架 在ASM框架中有两个主要的类,一个是ClassVisitor,一个是ClassReader。 ClassReader接收一个输入流,读取.class文件时通过accept方法 回调 ClassVisitor的各类 visit开头 的方法; InputStream is = new BufferedInputStream ( resource . getInputStream ( ) ) ; ClassReader classReader = new ClassReader ( is ) ; classReader . accept ( visitor , ClassReader . SKIP_DEBUG )