使用像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.
原文地址:https://www.jb51.cc/java/437747.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。