[英]Accessing fields on parameters of instrumented method using ByteBuddy
我试图在运行时生成有效的属性访问器。 具体来说,这意味着我正在使用ByteBuddy生成实现以下接口的类:
interface PropertyAccess<T> {
void set(Object instance, T value);
T get(Object instance);
}
实现看起来应该是这样的:
class SomeProperty implements PropertyAccess<String> {
public void set(Object o, String s) {
((SomeClass) o).setFoo(s);
}
public String get(Object o) {
return ((SomeClass) o).getFoo();
}
}
对getter / setter对执行此操作很容易( getter
和setter
是实际getter和setter的java.lang.reflect.Method
对象):
new ByteBuddy()
.subclass(Object.class)
.implement(PropertyAccess<String>.class) // pseudo syntax, I am using Guava's TypeToken here in reality
.method(named("get")).intercept(invoke(getter).onArgument(0))
.method(named("set")).intercept(invoke(setter).onArgument(0).withArgument(1))
(我在这里省略了分配器,它将允许从Object
为SomeClass
)。
(or one of it's parents). 但是现在我还想允许为直接访问的字段生成这样的类,并且在没有编写自定义Implementation
类的情况下我找不到这样做的方法,因为FieldAccessor
只允许访问字段(或其中一个父类) 。
我错过了什么吗?
你是对的,目前没有办法访问字段而不是方法。 我认为通过处理类似于getter或setter的字段访问,这应该很容易解决。 我在机票#225中跟踪此限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.