Cglib не способен сохранять аннотации без изменения своей внутренней реализации. Это, однако, довольно сложно, и поверьте мне, я пытался. Моя измененная версия, которую я наконец-то придумал, была настолько сложной, что я решил реализовать Byte Buddy , еще одну библиотеку генерации кода, которая способна на такую функциональность.
Вот пример того, как вы можете создать подкласс, который
@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 Buddy поставляется с обширной полнотекстовой документацией и javadoc, и он вполне расширяем. Надеюсь, вы хорошо используете библиотеку.