artifact.clazz和bean.class之间的区别

时间:2014-01-29 13:45:03

标签: grails groovy

在我的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)

虽然第一种方式对我不起作用,但第二种方式效果很好。 为什么这些课程不同,有什么区别?

1 个答案:

答案 0 :(得分:1)

在回答中转换注释,可以通过打印控制器的类来澄清差异:

在第一种情况下,bean类是一个代理:custom.package.CustomController$$EnhancerByCGLIB$$a131be82你可以注意到“EnhacerByCGLIB”部分。在第二个课程中,课程是正确的。