Пара вещей ...
1.) Убедитесь, что ваша аннотация имеет политику хранения @Retention(RetentionPolicy.RUNTIME)
. Политика хранения RUNTIME позволяет аннотации быть доступной для отражения во время выполнения. Так что ваш интерфейс должен выглядеть так ....
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface NavAnnotation {
boolean addToAdminMenu() default false;
}
2.) grailsApplication.domainClasses
возвращает DefaultGrailsDomainClass
, а не фактический класс, на котором вы хотите отразить отражения. Вместо этого вы хотите получить доступ к подчеркивающему классу с помощью метода getClazz (), как этот ...
def appDomainClasses = grailsApplication.domainClasses.findAll {
it.getClazz().isAnnotationPresent( NavAnnotation )
}
Я проверил, чтобы убедиться, что это работает. Наслаждайтесь!
-Спасибо