grails域类注释不在控制器中拾取

时间:2012-03-19 11:54:11

标签: grails groovy

我创建了以下注释:

public @interface NavAnnotation {

    boolean addToAdminMenu() default false;

}

...然后尝试注释域类:

@NavAnnotation ( addToAdminMenu = true )
class Information {...}

...并在控制器中执行此操作:

def appDomainClasses = grailsApplication.domainClasses.findAll {
    it.class.isAnnotationPresent( NavAnnotation )

}
[ appDomainClasses : appDomainClasses ]

...但是这个带注释的课程没有被提起。关于我缺少的任何想法?

1 个答案:

答案 0 :(得分:4)

情侣......

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 )

}

我已经测试确认它有效。享受!

-Thanks