背景:我想使用 LogInterceptor 来检测一组接口(在同一个包中)的所有实现(只是记录调用了该方法)。因此我用 byte-buddy 写了一个 javaagent。一般来说,这工作正常,但我正在努力寻找一组接口的所有实现。
假设我们在包 my.company.api 中有一组 Java 接口,那么我尝试了以下方式:
public static void premain(String arguments, Instrumentation instrumentation) {
new AgentBuilder.Default()
.ignore(ElementMatchers.isInterface())
.ignore(ElementMatchers.isEnum())
.type(ElementMatchers.nameMatches("my\\.company\\.api\\..*"))
.transform(new AgentBuilder.Transformer() {
@Override
public DynamicType.Builder transform(DynamicType.Builder builder, TypeDescription typeDescription, ClassLoader classloader) {
return builder
.method(ElementMatchers.isPublic())
.intercept(MethodDelegation.to(LogInterceptor.class));
}
}).installOn(instrumentation);
}
我对 byte-buddy 很陌生,也许有人可以提示我做错了什么。