Cglib no es capaz de retener las anotaciones sin cambiar su implementación interna. Sin embargo, esto es bastante complicado y créanme, lo intenté. Sin embargo, mi versión modificada que finalmente se me ocurrió fue tan complicada que decidí implementar Byte Buddy, otra biblioteca de generación de código que es capaz de tal funcionalidad.
Aquí es un ejemplo de cómo se puede crear subclase que
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation { }
@MyAnnotation
class MyClass { }
assertThat(new ByteBuddy()
.subclass(Object.class)
.attribute(TypeAttributeAppender.ForSuperType.INSTANCE)
.make()
.load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
.getLoaded()
.isAnnotationPresent(MyAnnotation.class), is(true));
Byte compinche viene con una documentación de texto extenso y javadoc y es muy extensible. Espero que hagas un buen uso de la biblioteca.
¿La anotación @herida solucionó el problema? Si es así, puede considerar aprobar la respuesta. Gracias. – noego
'@ Inherited' no resuelve el problema (lo intenté solo). Personalmente, estaba usando un proyecto de Spring y lo resolví utilizando la clase de utilidad AnnotationUtils, por lo que puede ver [aquí] (https://github.com/spring-projects/spring-framework/blob/master/spring-core/src/main /java/org/springframework/core/annotation/AnnotationUtils.java) cómo funciona. – Alessio