在得以继续查看基于规约所能提供的运行时配置以前,有必要了解一下怎样来评估插件的这些基本规约。
本质上,每一个插件都有一个隐含的 GrailsApplication接口的实例变量:
application。
GrailsApplication 提供了在工程内评估这些规约的方法并且保存着所有类的相互引用,这些类都实现了 GrailsClass 接口.
一个 GrailsClass 代表着一个物理的Grails资源,比如一个控制器或者一个标签库。
如果要获取所有 GrailsClass 实例,你可以这样:application.allClasses.each { println it.name }
在 GrailsApplication 实例中有一些特殊的属性可以方便的操作你感兴趣的人工制品(artefact)类型,比如你要获取所有控制器的类,可以如此:application.controllerClasses.each { println it.name }
这些动态方法的规约如下:
• *Classes - 获取特定人工制品名称的所有类,比如 application.controllerClasses.
• get*Class - 获取特定人工制品的特定类,比如application.getControllerClass(“ExampleController”)
• is*Class - 如果给定的类是指定的人工制品类型,那么返回true, 比如application.isControllerClass(ExampleController.class)
• add*Class - 为给定的人工制品类型新增一个类并且返回新增的 GrailsClass 实例-比如:application.addControllerClass(ExampleController.class)
GrailsClass 接口本身也提供了很多有用的方法以允许你进一步的评估和了解这些规约,他们包括:
• getPropertyValue - 获取给定属性的初始值
• hasProperty - 如果类含有指定的属性,那么返回true
• newInstance - 创建一个类的新实例
• getName - 如果可以的话,返回应用类的逻辑名称,此名称不含后缀部分
• getShortName - 返回类的简称,不包含包前缀
• getFullName - 返回应用类的完整名称,包含后缀部分和包的名称
• getPropertyName - 将类的名称返回为属性名称
• getLogicalPropertyName - 如果可以的话,返回应用类的逻辑属性名称,此名称不包含后缀部分
• getNaturalName - 返回属性名称的自然语言的术语(比如将’lastName’ 变为 ‘LastName’)
• getPackageName - 返回包的名称