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

  • 本文将介绍与操作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组成及顺序图:

    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的适配器。

    顺序图:

    ASM顺序图 

    Demo

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

    类HelloTaobao:

       
       
    1. publicclassHelloTaobao  
    2. {  
    3. publicvoidhelloHeyun()  
    4. {  
    5. System.out.println(“Hello,ThisisHeyun’sinvestigationaboutcodecoverage!”);  
    6. }  
    7. }  
    8.  

    主方法类:

       
       
    1. publicclassMain  
    2. {  
    3. publicstaticvoidmain(String[]args)  
    4. {  
    5. HelloTaobaoht=newHelloTaobao();  
    6. ht.heyunHeyun();  
    7. }  
    8. }  
    9.  

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值