Я испытываю странное поведение при поиске аннотаций для метода, принадлежащего классу, проксированному через CGLIB. Мы используем CGLIB в Spring, и если я аннотирую метод только с аннотацией, он работает хорошо (я могу получить аннотации с помощью метода getAnnotations()
для соответствующего объекта Method
). Если вместо этого я аннотирую метод двумя аннотациями (независимо от порядка аннотаций), getAnnotations()
просто вернет null
. Обе аннотации имеют RetentionPolicy.RUNTIME
.
Я читал, что есть некоторые проблемы с CGLIB, но странно, что он просто работает для одной аннотации и возвращает ноль, когда я ставлю 2 аннотации.
Есть предложения?
(с использованием 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
.