背景: 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 にまったく慣れていません。誰かが私が間違っていることのヒントを教えてくれるかもしれません。