Cglib n'est pas capable de conserver des annotations sans modifier sa mise en œuvre interne. C'est cependant assez compliqué et croyez-moi j'ai essayé. Ma version modifiée que j'ai finalement trouvée était cependant si compliquée que j'ai décidé d'implémenter plutôt Byte Buddy, une autre bibliothèque de génération de code qui est capable d'une telle fonctionnalité.
Voici un exemple de la façon dont vous pouvez créer sous-classe qui
@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 copain est livré avec une documentation complète en texte intégral et javadoc et il est tout à fait extensible. J'espère que vous faites bon usage de la bibliothèque.
Est-ce que l'annotation @Inherited a résolu le problème? Si oui, vous pouvez envisager d'approuver la réponse. Merci. – noego
'@ Inherited' ne résout pas le problème (je l'ai essayé moi-même). Personnellement, j'utilisais un projet Spring et j'ai résolu le problème en utilisant la classe utilitaire AnnotationUtils, donc vous pouvez voir [ici] (https://github.com/spring-projects/spring-framework/blob/master/spring-core/src/main /java/org/springframework/core/annotation/AnnotationUtils.java) comment cela fonctionne. – Alessio