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

Ton*_*ony 5 java bytecode-manipulation java-bytecode-asm

使用类似ASMor 的库cglib,有没有办法在每次设置类字段的值时将字节码指令添加到类中以执行代码?

例如,假设我有这个类:


   public class Person
   {  
       bool dirty;
       public String name;
       public Date birthDate;
       public double salary;
   }
Run Code Online (Sandbox Code Playgroud)

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

person.name = "Joe";

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

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

编辑

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

Ano*_*non 4

有两个用于更新字段的字节码:putfieldputstatic(请参见http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc11.html)。这些将在使用类的代码中找到,因此无法简单地修改Person.