#byte-buddy
#byte-buddy
Вопрос:
При использовании bytebuddy преобразованный класс не содержит аннотацию метода: @ProtectionContext, которая присутствовала в методе ранее (хотя и добавлялась динамически через javassist).
Примечание: эта проблема не возникает, когда аннотация жестко запрограммирована в классе. Это происходит только тогда, когда аннотации добавляются динамически
Как вы можете видеть, аннотации правильно распознаются в сопоставителе, поэтому это означает, что byte buddy получил класс с аннотациями метода.
Но после вызова unloaded.load(…) аннотации метода нигде не найдены.
Я все перепробовал, но это не работает
ElementMatcher<MethodDescription> matcher = new
ElementMatcher<MethodDescription>() {
@Override
public boolean matches(MethodDescription target) {
if (target.isAbstract()) {
return false;
}
for (AnnotationDescription a : target.getDeclaredAnnotations()) {
if (a.getAnnotationType().getTypeName().equals(ProtectionContext.class.getName())) {
// System.out.println(target);
return true;
}
}
return false;
}
};
Unloaded<?> unloaded = new ByteBuddy()
.with(AnnotationRetention.ENABLED)
.rebase(c)
.method(matcher)
.intercept(MethodDelegation.to(Interceptor.class)
.andThen(SuperMethodCall.INSTANCE)
)
.make();
Class<?> c = unloaded.load(...).getLoaded();
// Annotation not found on c
Добавление @Inherited в @interface ProtectionContext также не работает
Ответ №1:
Отвечаю на это сам.
Метод перебазирования перегружен, чтобы принять ClassFileLocator, который должен быть указан для запроса измененного байт-кода формы Javassist