`
victorzhzh
  • 浏览: 203034 次
  • 来自: ...
社区版块
存档分类
最新评论
文章列表
前面我们了解了如何使用ASM的CoreAPI来操作一个类的属性,现在我们来看一下如何修改一个类方法。 场景:假设我们有一个Person类,它当中有一个sleep方法,我们希望监控一下这个sleep方法的运行时间: 一般我们会在代码里这样写: public void sleep() { long timer = System.currentTimeMillis(); try { System.out.println("我要睡一会..."); TimeUnit.SECONDS.sleep(2); } catch (Interru ...
    在上一篇文章中,我们看到了ASM中的Core API中使用的是XXXVisitor操作类中的对应部分。本文将展示如何使用ASM中的Core API对类的属性的操作。 首先,我们定义一个原类Person,如下: public class Person { public String name = "zhangzhuo"; public String address = "xxxxx" ; }  这里,我们将属性定义为public类型,目的是为了我们使用反射去调用这个属性,接下来我们要为这个类添加一个int类型的属性,名字叫age。 ...
    在ASM的Core API中使用的是访问者模式来实现对类的操作,主要包含如下类: 一、ClassVisitor接口:     在这个接口中主要提供了和类结构同名的一些方法,这些方法可以对相应的类结构进行操作。如下: public interface ClassVi ...
    上一篇文章中我们看到了如何使用ASM生成一个简单的JAVA类,里面使用到了很多的基本概念,比如:方法描述、引用描述等,下面将一一介绍。 一、类版本:     一个Java二进制的类文件,都有一个版本,因此ASM中提供了几个常量来指定一个类的版,这些常量定义在org.objectweb.asm.Opcodes接口中,如下: int V1_1 = 3 << 16 | 45; int V1_2 = 0 << 16 | 46; int V1_3 = 0 << 16 | 47; int V1_4 = 0 << 16 | 48; int ...
一、什么是ASM     ASM是一个JAVA字节码分析、创建和修改的开源应用框架。在ASM中提供了诸多的API用于对类的内容进行字节码操作的方法。与传统的BCEL和SERL不同,在ASM中提供了更为优雅和灵活的操作字节码的方式。目前ASM已被广泛的开源应用架构所使用,例如:Spring、Hibernate等。 二、ASM能干什么     分析一个类、从字节码角度创建一个类、修改一个已经被编译过的类文件 三、ASM初探例子     这里我们使用ASM的CoreAPI(ASM提供了两组API:Core和Tree,Core是基于访问者模式来操作类的,而Tree是基于树节点来操作类的)创建一 ...
Global site tag (gtag.js) - Google Analytics