所有方法,属性在哪里都连接到grails控制器?

时间:2013-01-04 16:17:27

标签: grails controller

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

2 个答案:

答案 0 :(得分:2)

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

  • 网络图层文档中的Controllers部分。
  • render方法的文档。请查看右侧的“快速参考”列,了解控制器提供的更多方法。

如果你想知道魔法是如何完成的,Grails是open source project,所以像往常一样,去Github服务自己(警告,这是一个非常大的项目)。

Grails在Groovy的顶层工作,这是一种动态语言,具有对元编程的强大支持。 Tha基本上是Grails所有神奇的技巧

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

与知名思想的整合也非常强大,你应该check it out

修改 您还可以在github上找到渲染方法的行为hereControllers metaClass package

中的更多内容

答案 1 :(得分:1)

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

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

对于血腥的详细信息,ControllersApi是方法所在的位置,它们通过ControllerTransformerdoWithDynamicMethods闭包中的代码ControllersGrailsPlugin的组合混合到每个控制器类中{3}}