Фон: Я хочу, чтобы инструмент всех реализаций набора интерфейсов (в пределах одного пакета) с LogInterceptor (только ведение журнала, что метод был вызван). Поэтому я написал javaagent с байт-приятелем. В общем, это нормально работает, но я борюсь с поиском всех реализаций набора интерфейсов.Инструмент всех реализаций набора интерфейсов с ByteBuddy
Предположим, что мы имеем набор Java-интерфейсов в пакете my.company.api, то я пробовал следующим образом:
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);
}
Я совершенно новый с байт-приятель, может быть кто-то может дать мне намек, что я делаю неправильно.