我有一個premain(),其中所有使用某個註釋標註的方法都應該委託給某個類。在一般情況下,我是這樣的:ByteBuddy MethodDelegation在Java代理中不起作用
public static void premain(final String agentArguments, final Instrumentation instrumentation) {
CountingInterception ci = new CountingInterception();
new AgentBuilder.Default()
.type(ElementMatchers.isAnnotatedWith(com.codahale.metrics.annotation.Counted.class))
.transform((builder, type, classLoader, module) ->
builder.method(ElementMatchers.any())
.intercept(MethodDelegation.to(ci))
).installOn(instrumentation);
}
使用調試器顯示,這部分被處理,但如果註解的方法被調用時,沒有任何反應。
的CountingInterception看起來像這樣
public class CountingInterception {
@RuntimeType
public Object intercept(@DefaultCall final Callable<?> zuper, @Origin final Method method, @AllArguments final Object... args) throws Exception {
String name = method.getAnnotation(Counted.class).name();
if (name != null) {
// do something
}
return zuper.call();
}
}
感謝任何提示!
使用ByteBuddy 1.6.9
謝謝你的提示。 – micfra