在我的grails项目中,一些控制器的操作使用自定义注释进行注释,比如CustomAnnotation。 此外,还有一个过滤器可以检查控制器的操作是否由CustomAnnotation注释。
我尝试了两种方法来执行此检查:
1)查找bean的类方法的注释
def artefact = grailsApplication.getArtefactByLogicalPropertyName("Controller", controllerName) def controller = applicationContext.getBean(artefact.clazz.name) def actionMethod = controller.class.declaredMethods.find { it.name == actionName } def isAnnotated = actionMethod.isAnnotationPresent(CustomAnnotation)
2)寻找神器的clazz方法的注释
def artefact = grailsApplication.getArtefactByLogicalPropertyName("Controller", controllerName) def actionMethod = artefact.clazz.declaredMethods.find { it.name == actionName } def isAnnotated = actionMethod.isAnnotationPresent(CustomAnnotation)
虽然第一种方式对我不起作用,但第二种方式效果很好。 为什么这些课程不同,有什么区别?
答案 0 :(得分:1)
在回答中转换注释,可以通过打印控制器的类来澄清差异:
在第一种情况下,bean类是一个代理:custom.package.CustomController$$EnhancerByCGLIB$$a131be82
你可以注意到“EnhacerByCGLIB”部分。在第二个课程中,课程是正确的。