JAVA字节码文件操作技巧(2)

    技术2022-07-03  106

    http://developer.51cto.com  2010-09-25 10:20  admin  qa.taobao.com  我要评论(0) 本文将介绍与操作Java字节码有关的基本知识和操作Java字节码的方法及Demo,谈到操作Java字节码,不能不谈到AOP,这里向大家做一下简单介绍。

     

    ASM的几个特性:

    1.JAVABased.

    ASM是基于JAVA的,即用JAVA实现的。

    2.Visitor模式.

    对于ASM来说,Javaclass被描述为一棵树;使用“Visitor”模式遍历整个二进制结构。

    3.复杂性低.易学易用.

    ASM提供了更为现代的编程模型,降低了操作Java字节码的复杂性,使用事件驱动的处理方式使得用户只需要关注于对其编程有意义的部分,而不必了解Java类文件格式的所有细节:ASM框架提供了默认的“responsetaker”处理这一切。

    4.较高的性能

    对Java字节码进行操作的同时尽量减小的性能的损失(性能的损失是不可避免)。

    这里来介绍一下ASM组成及顺序图:

    Corepackage提供了一个读写、修改Javabytecode的API,并且为其它的package定义了依据。这个package对于生成Javabytecode、实现大多数的bytecode变换而言意义重大。

    Treepackage提供了Javabytecode的内存表示法。

    Analysispackage提供了基本的数据流分析和类型检查算法,它们将用于在treeoackage中存储Java方法bytecode。

    Commonspackage(包含在ASM2.0中)提供了一些常用的bytecode转换和用于简化bytecode生成的适配器。

    Utilpackage包含了一些帮助类和简单的bytecode验证器,它们将有助于开发或者测试。

    XMLpackage提供了一个用于在bytecode和XML之间进行转换的适配器,和一些允许使用XSLT定义bytecode转换的兼容SAX的适配器。

    顺序图:

     

    Demo

    这里我们来实现这样一个功能:在不能改变原代码功能的前提下,对于一个特定类的特定方法有没有被测试过,以HelloTaobao类中方法helloHeyun为例。

    类HelloTaobao:

    publicclassHelloTaobao  {  publicvoidhelloHeyun()  {  System.out.println(“Hello,ThisisHeyun’sinvestigationaboutcodecoverage!”);  }  }   

    主方法类:

    publicclassMain  {  publicstaticvoidmain(String[]args)  {  HelloTaobaoht=newHelloTaobao();  ht.heyunHeyun();  }  }   

    到这里,我们运行一下程序,会在Console输出字符串:“Hello,ThisisHeyun’sinvestigationaboutcodecoverage!”。

    共3页: 上一页 [1] 2 [3] 下一页


    最新回复(0)