字段写入器拦截器
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 访问该字段,这几乎是不可能的。
我正在研究 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 访问该字段,这几乎是不可能的。