Я испытываю странное поведение при поиске через отражение аннотаций к методу, принадлежащему классу, проксируемому через CGLIB. Мы используем CGLIB в Spring, и если я аннотирую метод только с помощью аннотации, он работает хорошо (я могу получить аннотации с помощью метода getAnnotations ()
соответствующего метода
объект). Если вместо этого я аннотирую метод двумя аннотациями (независимо от порядка аннотации), getAnnotations ()
просто вернет null
. Обе аннотации имеют RetentionPolicy.RUNTIME
.
Я читал, что с CGLIB есть некоторые проблемы, но странно, что он просто работает для одной аннотации и возвращает null, когда я помещаю две аннотации.
Есть предложения?
(Использование Spring 3.0.5 и CGLIB 2.2.2)
Добавление кода:
1-я аннотация:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Produces {
ResultType[] value();
}
2-я аннотация:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface JamonMonitored {
String type() default "";
String tag() default "";
}
И блок кода предназначен для проверка аннотаций -
Collection<Method> candidates = Collections2.filter(Arrays.asList(executorInstance.getClass().getMethods()), new Predicate<Method>() {
@Override
public boolean apply(Method input) {
return input.getAnnotation(Produces.class) != null;
}
});
if (candidates.isEmpty()) {
// throws exception
}
Если я аннотирую метод как @Produces, так и @JamonMonitored, getAnnotation (Produces.class)
всегда имеет значение null
.