如果每次查察反编译后的字节码都使用javap下令的话,好非常繁琐。这里保举一个Idea插件:jclasslib。使用效果如图15所示,代码编译后在菜单栏"View"中选择"Show Bytecode With jclasslib",可以很直观地看到当前字节码文件的类信息、常量池、方法区等信息。
二、字节码加强
对于须要手动利用字节码的需求,可以使用ASM,它可以直接天生.class字节码文件,也可以在类被加载入JVM之前动态修改类活动(如下图17所示)。ASM的应用场景有AOP(Cglib就是基于ASM)、热摆设、修改其他jar包中的类等。当然,涉及到云云底层的步调,实现起来也比力贫困。接下来,本文将先容ASM的两种API,并用ASM来实现一个比力粗糙的AOP。但在此之前,为了让各人更快地明白ASM的处理流程,猛烈发起读者先对访问者模式举行相识。简朴来说,访问者模式告急用于修改或操纵一些数据布局比力稳固的数据,而通过第一章,我们知道字节码文件的布局是由JVM固定的,以是很恰当利用访问者模式对字节码文件举行修改。
2.1.1 ASM API
ASM Tree API可以类比剖析XML文件中的DOM方式,把整个类的布局读取到内存中,缺点是斲丧内存多,但是编程比力简朴。TreeApi差异于CoreAPI,TreeAPI通过各种Node类来映射字节码的各个地区,类比DOM节点,就可以很好地明白这种编程方式。
2.1.2 直接利用ASM实现AOP