java – 字节码操作来拦截设置字段的值

使用像ASM或cglib这样的库,有没有办法将字节码指令添加到类中,以便在设置类字段的值时执行代码

例如,假设我有这个类:


   public class Person
   {  
       bool dirty;
       public String name;
       public Date birthDate;
       public double salary;
   }

假设一段代码包含以下行:

   person.name =“乔”;

我希望拦截此指令,以便将脏标志设置为true.我知道这对于setter方法是可行的 – person.setName(“Joe”) – 因为类方法可以通过字节码操作来修改,但我想对字段做同样的事情.

这是可能的,如果是的话,怎么样?

编辑

我想避免修改访问类的代码部分,我正在寻找一种方法来将拦截代码作为Person类的一部分.是否存在用于字段访问的伪方法,类似于Python类中的属性

最佳答案
更新字段有两个字节码:putfield和putstatic(参见http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc11.html).这些将在using类的代码中找到,因此无法简单地修改Person.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...