аннотации метода обнуляются при проксировании через CGLIB

Я испытываю странное поведение при поиске через отражение аннотаций к методу, принадлежащему классу, проксируемому через 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 .

8
задан manub 25 January 2012 в 15:53
поделиться