Grails控制器中的操作和方法之间的差异

时间:2013-03-24 18:46:11

标签: grails methods controller closures action

据我所知,如果我想在控制器中创建一个动作,那么我可以通过以下方式完成:

class My Controller {
    def myAction = {
      println "in my action "
    }
}

或者我可以通过以下方式创建它:

class My Controller {
    def myAction(){
      println "in my action "
    }
}

有人可以告诉两种方法的区别,或者我的概念或看法是否有任何问题

3 个答案:

答案 0 :(得分:2)

第一个实现是在控制器中定义公共闭包,第二个是使用公共方法。

第二种方式是在Grails 2中引入的,被广泛认为是最好的方式。

我可以从头脑中想到几个原因:

  • 特别是在最近版本的grails中,使用方法可以让你利用Traits。
  • 您可以使用继承来组织方法
  • 必须更高效

<强>更新 Why should grails actions be declared as methods instead of closures and what difference does it make?

答案 1 :(得分:0)

我不确定,但我认为它曾经是第一种方式是唯一的方法,然后它改为允许第二种方式。我认为第二种方式是优先方式,但我不确定。

[编辑]

这是另一个堆栈溢出帖子,进一步解释它:

Why should grails actions be declared as methods instead of closures and what difference does it make?

答案 2 :(得分:0)

利用方法而不是动作(Closure属性)有一些优点:

  1. 内存效率
  2. 允许使用无状态控制器(单例范围)
  3. 您可以覆盖子类中的操作,并使用super.actionName()调用重写的超类方法
  4. 方法可以使用标准代理机制拦截,这与Closures很复杂,因为它们是字段。
  5. 请访问以下链接了解更多信息。

    Grails controllers