gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:15:54 28 4
gpt4 key购买 nike

使用像 ASMcglib 这样的库,有没有办法在类字段的值设置时向类添加字节码指令以执行代码?

例如,假设我有这个类:


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

假设一段代码包含这一行:


person.name = "乔";

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

这可能吗?如果可能,如何

编辑

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

最佳答案

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

关于java - 字节码操作以拦截设置字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4198164/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com