He estado usando el AOP de Guice para interceptar algunas llamadas a métodos. Mi clase implementa una interfaz y me gustaría anotar los métodos de interfaz para que Guice pueda seleccionar los métodos correctos. Incluso si el tipo de anotación se anota con Inherited anotación de la implementación de la clase no hereda la anotación como se indica en el documento de java Hereditaria:¿Por qué las clases de Java no heredan las anotaciones de las interfaces implementadas?
Tenga en cuenta también que este meta-anotación sólo causa anotaciones para ser heredados de superclases; Las anotaciones en las interfaces implementadas no tienen ningún efecto.
¿Cuál podría ser el motivo de esto? Conocer todas las interfaces que la clase de un objeto implementa en tiempo de ejecución no es tan difícil, por lo que debe haber una buena razón detrás de esta decisión.
Las anotaciones en las interfaces solo son útiles si tiene un marco que las admite.Por cierto, en este ejemplo getAnnotation() devuelve nulo;) –
No sé, gente. En este caso (si el error no estaba allí), esperaría un 'El valor del campo es ambiguo. -como el error del compilador al igual que con dos interfaces que declaran la misma constante con diferentes valores. Sé que esto no es un campo, pero los valores de las anotaciones se resuelven en tiempo de compilación, ¿no? La función que nos falta aquí sería muy útil en muchos casos. Perdón por revivir una publicación anterior, por cierto :). –
@Slanec eche un vistazo a la forma en que las fuentes de Spring ven cómo los chicos de Spring solucionaron estos problemas. Ver [AnnotationUtils.findAnnotation (method, annotationType)] (http://grepcode.com/file/repo1.maven.org/maven2/org.springframework/spring-core/3.1.1.RELEASE/org/springframework/core/ annotation/AnnotationUtils.java # AnnotationUtils.findAnnotation% 28java.lang.reflect.Method% 2Cjava.lang.Class% 29) –