使用asm动态生成class文件

概述

       我们都知道jvm运行的原材料是class文件,而class文件基本上都是由java源文件通过javac编译得到,但有时我们在程序运行前并不知道要使用什么类,只有在运行时根据当时的程序执行状态才知道要运行什么类。比如jdk中的动态代理它能使用一套api代理所有符合条件的类,这这些代理类都是在程序运行过程中动态生成的。那么能够在程序运行期间直接生成class文件?(note: jdk的动态代理还是根据源文件编译,只不过源文件也是动态生成, jdk1.8直接生成字节码了),答案是肯定的,有一种叫asm的库可以直接生成class文件,cglib就是基于asm框架。

     asm中的每个api都和class文件格式中的特定部分相吻合。下面通过HelloWorld来说明。


     asm库中的每个api都是使用对应class文件中的某部分信息,如果对class文件格式比较熟悉,使用起来会更方便。asm是cglib动态代理的基础, 连接asm是如何生成class文件的有助于理解cglib的原理。

你可能感兴趣的:(使用asm动态生成class文件)