字段写入器拦截器

Field writer interceptor

我正在研究 Byte Buddy,我正在尝试用它替换 CGLib。我想知道是否有一种方法可以实现拦截对任何字段的写入。我不知道字段类型,也不想更改分配的值。我只想记录 field written! 任何访问。

示例:如果我有这个 class:

public class Ex {
    public int i;
    public String s;
    public boolean b;
}

稍后当我这样做时:

Ex e = new Ex();
e.i=1;
System.out.println("Value of i:" + i);
e.s="hello";
System.out.println("Value of s:" + hello);

它应该输出:

field written!
Value of i: 1
field writed!
Value of s: hello

Custom Instrumentation下的帮助页面中,有一个示例,但不清楚。

不,那是不可能的。这是你使用 cglib 做的事情吗?因为this is neither possible using Byte Buddy nor using cglib.

问题是字段不是动态调度的。与其重新定义包含该字段的 class,您还需要重新定义任何 class 访问该字段,这几乎是不可能的。