1
如果我有一類,說:訪問私有字段中截獲類,使用ByteBuddy
public class Foo {
private String name;
//...
public void someMethod(Object someArg) {
}
}
..我想攔截「的someMethod」,使用Java代理,所以我一起做一些事情的線路:
public static void premain(String args, Instrumentation inst) {
new AgentBuilder.Default()
.type(ElementMatchers.named("Foo"))
.transform((builder, typeDescription, classLoader, module)
-> builder.method(
ElementMatchers.named("someMethod"))
.intercept(MethodDelegation.to(Interceptor.class))
)
.installOn(inst);
}
public class Interceptor() {
public static void intercept(
@AllArguments Object[] args,
@This Foo foo,
@SuperCall Callable zuper) {
if (foo.name.equals("BAR") //foo.name inaccessible here
zuper();
else {/*something else*/}
}
}
如何使用ByteBuddy給我一個方法來訪問類Foo的「名稱」字段,而我的攔截方法裏面?
可以ByteBuddy暴露該私有變量爲我檢查(或修改我猜,但對於我的用例,只讀是好的)?
啊對。得到它了。這對我來說非常合適,因爲我只需要讀取訪問權限。謝謝。 – pconnell