Tengo un comportamiento extraño cuando miro por reflejo las anotaciones de un método perteneciente a una clase con proxy vía CGLIB. Usamos CGLIB en Spring, y si anoto un método solo con una anotación, funciona bien (puedo recuperar las anotaciones a través del método getAnnotations()
en el objeto correspondiente Method
). Si anoto el método con 2 anotaciones (sin importar el orden de la anotación), getAnnotations()
simplemente devuelva null
. Ambas anotaciones tienen RetentionPolicy.RUNTIME
.anotaciones de método nulas al enviar proxy a través de CGLIB
He leído que hay algunos problemas con CGLIB, pero es extraño que simplemente funcione para una anotación y devuelve nulo cuando coloco 2 anotaciones.
¿Alguna sugerencia?
(utilizando Spring 3.0.5 y 2.2.2 CGLIB)
Adición de código:
primera anotación es:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Produces {
ResultType[] value();
}
segunda anotación es
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface JamonMonitored {
String type() default "";
String tag() default "";
}
Y el el bloque de código es para comprobar las anotaciones es
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
}
Si anoto un método con las dos @Produces y @JamonMonitored, getAnnotation(Produces.class)
es siempre null
.
Puede proporcionar código . esto parece interesante, me gustaría echarle un vistazo. ¿Pero no he oído hablar de algo así, como el código? –
Y espero que hayas pasado por este segmento real: http://stackoverflow.com/questions/1706751/retain-annotations-on-cglib-proxies –