Mam dziwne zachowanie podczas przeglądania za pomocą adnotacji na metodzie należącej do klasy proxy za pośrednictwem CGLIB. Używamy CGLIB na wiosnę i jeśli dodaję adnotację do metody tylko z adnotacją, to działa dobrze (jestem w stanie pobrać adnotacje za pomocą metody getAnnotations()
na odpowiednim obiekcie Method
). Jeśli dodam adnotację do metody z 2 adnotacjami (bez względu na kolejność adnotacji), getAnnotations()
po prostu zwrócę null
. Obie adnotacje mają RetentionPolicy.RUNTIME
.Adnotacje metody null podczas pośredniczenia za pośrednictwem CGLIB
Przeczytałem, że są pewne problemy z CGLIB, ale to dziwne, że działa po prostu na jedną adnotację i zwraca null, kiedy umieszczam 2 adnotacje.
Wszelkie sugestie?
(Korzystanie Wiosna 3.0.5 i 2.2.2) CGLIB
Dodawanie kodu:
1-ta jest adnotacja:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Produces {
ResultType[] value();
}
2-te adnotacja jest
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface JamonMonitored {
String type() default "";
String tag() default "";
}
A blok kodu służy do sprawdzania adnotacji:
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
}
Jeśli dodaję adnotację do metody z @Produces i @JamonMonitored, getAnnotation(Produces.class)
jest zawsze null
.
Czy możesz podać kod . to wygląda ciekawie, chciałoby się rzucić okiem. Ale nie słyszałem o takich rzeczach, hnece kod? –
I mam nadzieję, że przeszliście przez ten kawałek - http://stackoverflow.com/questions/1706751/retain-annotations-on-cglib-proxies –