2013-01-04 23 views
1

我在看grails(2.2),它很漂亮,甚至神奇,它是如何工作的。我正在查看一个Controller类,该类使用grails create-controller创建,开箱即用,它具有许多可用的方法和属性,如render(),redirect(),params,request,我假设它继续。 这里所有这些接线?在代码/项目/框架中,我能看到render()是作为一个方法提供的吗?它是如何实现的? 作为一名java开发人员,我习惯于继承和代码注入和反射。而在JavaScript原型可以做一些黑魔法。但是XXController.groovy只是一个独立的对象。它是名称(XXController)还是位置(grails-app/controllers?),还是有一些注入事件可以让IDE选择?哪里有所有的方法,属性连线到grails控制器?

回答

1

而更多inyected的东西 - 。以前它是通过添加方法来Groovy的MetaClass的实现新方法的好处是,事情将是一个位速度更快,使用更少的内存。

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

对于血淋淋的细节,ControllersApi是其中的方法是,他们正在通过ControllerTransformer组合和ControllersGrailsPlugin

+0

感谢这个在doWithDynamicMethods封闭的代码混合到每个控制器类,我想我应该已经提到我在2.X上 –

2

欢迎的Grails的完美的事情的世界, 这里有几个链接,可以帮助您:

  • Controllers在Web层文档的部分。
  • render方法的文档。查看右边的“快速参考”列,了解更多控制器可用的方法。

如果你想知道的是魔术是如何完成的,Grails是一个open source project,所以像往常一样,去在Github上起到自己(警告,这是相当大的项目)。

Grails在Groovy的顶端工作,Groovy是一种动态语言,具有强大的元编程支持。最后,Grails是一个基于CoC(Convection over configuration)的框架,因此控制器将是目录“grails-app/controllers”下的任何类,并且与后缀“控制器”。 (在控制器的文件夹可能是“commandObjects以及)。

与众所周知的集成开发环境的整合是非常强大的,以及,你应该check it out

编辑 你可能也发现了如何渲染方法作为Grails的2.0+的它的使用AST转换来实现在github上表现hereControllers metaClass package

相关问题