我正在尝试使用字节预算来拦截getfield
和putfield
访问。我已经阅读了该站点上相当全面的文档,但是据我所知,它涵盖了向字段添加getter和setter,而不是拦截字段访问。
这基本上是我想要做的:
...
obj.prop = value;
x = obj.prop;
...
在这两种情况下,我都试图在字段访问之前/之后调用某种方法(或插入一些字节码)。我本来想用Advice
它来做,但是我找不到方法以外的其他方法来拥有它。
编辑:
我正在使用Java代理来做。我有一个想法,添加一个dup
复制对象引用,然后调用定义为拦截访问的静态方法(我只关心引用的对象,而不关心字段)。
有一个新组件仍在开发中,但已经使用基本API公开了。它被调用,MemberSubstitution
并允许您用另一个执行替换方法调用或字段访问。
但是,此组件确实依赖于替换执行指令的代码。字段访问是非虚拟的,因此无法创建任何会拦截虚拟访问的代理类。相反,您必须重新定义任何现有的读取或写入字段的类,例如通过使用Java代理。
至于您更具体的问题:目前,只能进行一对一替换。我还没有时间包含一种用于调整堆栈和局部变量大小的机制。此外,你也必须DUP对象向下降低堆栈上如果字段是非静态的。可以这么说,这个问题并非微不足道,但我希望有一天能提供这种功能。
目前,您可以用静态方法调用替换字段访问。可能可以通过此方法执行原始现场操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句