1

我在看 grails (2.2),它很漂亮,甚至很神奇,它是如何工作的。我正在查看一个使用grails create-controller开箱即用创建的 Controller 类,它有许多可用的方法和属性,如 render()、redirect()、params、request,我认为它会一直持续下去。所有这些都连接到哪里?我在代码/项目/框架中的哪个位置看到 render() 可以作为一种方法使用?它是如何实施的?作为一名 java 开发人员,我习惯于继承和代码注入和反射。并且在 javascript 原型中可以做一些黑魔法。但是 XXController.groovy 只是一个独立的对象。是名称 (XXController) 还是位置 (grails-app/controllers?) 还是 IDE 可以接收到一些注入?

4

2 回答 2

2

欢迎来到 Grails 的奇妙世界,这里有几个链接可以帮助您:

  • Web 层文档中的控制器部分。
  • 以及渲染方法的文档。查看右侧的“快速参考”列,了解控制器上可用的更多方法。

如果你想知道这个魔法是如何做到的,Grails 是一个开源项目,所以像往常一样,去 Github 为自己服务吧(警告,这是一个相当大的项目)。

Grails 工作在 Groovy 之上,Groovy 是一种动态语言,对元编程有强大的支持。Tha基本上是Grails所有魔法的诀窍

最后,Grails 是一个基于 CoC(Convection over configuration)的框架,因此控制器将是目录“grails-app/controllers”下的任何类,并带有后缀“Controller”。(在控制器文件夹中也可能是“commandObjects”)。

与知名ide的集成也很强大,你应该看看

编辑 您还可以在 github 上找到渲染方法的行为方式在Controllers 元类包中还有更多感染的东西

于 2013-01-04T17:18:04.800 回答
1

从 Grails 2.0+ 开始,它是使用 AST 转换实现的——以前是通过将方法添加到 Groovy MetaClass 来完成的。新方法的好处是事情会更快一些并且使用更少的内存。

GORM 域类方法现在也使用这种方法(除了必须动态添加到元类中的动态方法,如 findByFooAndBar),并且由于 AST 将方法添加到字节码,因此这些方法具有可从 Java 调用的好处。这对控制器没有帮助,因为它们只是作为 Web 请求的结果从 Grails 本身调用。

对于血腥的细节,ControllersApi是方法所在,它们通过ControllerTransformer和ControllersGrailsPlugindoWithDynamicMethods中闭包中的代码的组合混合到每个控制器类中

于 2013-01-04T17:54:57.313 回答