- 浏览: 203034 次
- 来自: ...
最新评论
-
jianglinjun:
public void sayName(); Code: ...
ASM系列之三:ASM中的访问者模式 -
cangchen8180:
这个问题怎么解决的啊,能不能分享一下???[b][/b]
阻塞方法引起的任务无法结束 -
wzx_it:
你就是牛人,联系方式留一个啊
ASM系列之一:初探ASM -
xwqiang:
不应该把timer当作static成员变量,如果有多个方法的执 ...
ASM系列之五:操作类方法 -
xwqiang:
生成的字节码是错误的:public class Person{ ...
ASM系列之五:操作类方法
文章列表
前面我们了解了如何使用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是基于树节点来操作类的)创建一 ...