При использовании bytebuddy преобразованный класс не содержит аннотации метода: @ProtectionContext, который ранее присутствовал в методе (хотя и добавлялся динамически через javassist).
Примечание: эта проблема не возникает, когда аннотацияжестко закодировано в классе.Это происходит только тогда, когда аннотации добавляются динамически
Как видите, аннотации правильно обнаруживаются в сопоставителе, поэтому это означает, что байтовый собеседник получил класс с аннотациями метода.
Нопосле вызова 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
Добавление @ Наследуется в@interface ProtectionContext также не работает