
ASM系列
victorzhzh
这个作者很懒,什么都没留下…
展开
-
ASM系列之一:初探ASM
一、什么是ASM ASM是一个JAVA字节码分析、创建和修改的开源应用框架。在ASM中提供了诸多的API用于对类的内容进行字节码操作的方法。与传统的BCEL和SERL不同,在ASM中提供了更为优雅和灵活的操作字节码的方式。目前ASM已被广泛的开源应用架构所使用,例如:Spring、Hibernate等。 二、ASM能干什么 分析一个类、从字节码角度创建一个类、修改一个已经被编...原创 2011-01-13 23:07:49 · 716 阅读 · 0 评论 -
ASM系列之二:Java类的基本表述
上一篇文章中我们看到了如何使用ASM生成一个简单的JAVA类,里面使用到了很多的基本概念,比如:方法描述、引用描述等,下面将一一介绍。 一、类版本: 一个Java二进制的类文件,都有一个版本,因此ASM中提供了几个常量来指定一个类的版,这些常量定义在org.objectweb.asm.Opcodes接口中,如下: int V1_1 = 3 << 16 | 45; ...原创 2011-01-16 11:43:09 · 205 阅读 · 0 评论 -
ASM系列之三:ASM中的访问者模式
在ASM的Core API中使用的是访问者模式来实现对类的操作,主要包含如下类: 一、ClassVisitor接口: 在这个接口中主要提供了和类结构同名的一些方法,这些方法可以对相应的类结构进行操作。如下: public interface ClassVisitor { void visit(int version,int access,String name,St...原创 2011-01-16 16:09:39 · 598 阅读 · 0 评论 -
ASM系列之四:操作类属性
在上一篇文章中,我们看到了ASM中的Core API中使用的是XXXVisitor操作类中的对应部分。本文将展示如何使用ASM中的Core API对类的属性的操作。 首先,我们定义一个原类Person,如下: public class Person { public String name = "zhangzhuo"; public String address = "xxxx...原创 2011-01-17 22:43:14 · 338 阅读 · 0 评论 -
ASM系列之五:操作类方法
前面我们了解了如何使用ASM的CoreAPI来操作一个类的属性,现在我们来看一下如何修改一个类方法。 场景:假设我们有一个Person类,它当中有一个sleep方法,我们希望监控一下这个sleep方法的运行时间: 一般我们会在代码里这样写: public void sleep() { long timer = System.currentTimeMillis(); ...2011-01-25 23:07:54 · 569 阅读 · 0 评论