在grails控制器中使用不带参数()的函数是否存在问题?

在grails控制器中使用不带参数()的函数是否存在问题?,grails,Grails,我在tomcat中托管的grails(1.3.7)应用程序中遇到了一个奇怪的问题 当应用程序持续使用时,应用程序会在某个时间点冻结(挂起状态)。在跟踪问题的过程中,我发现就在冻结时,一个参数为零的函数(例如,作为控制器代码的一部分的getLinceneInfo()函数)被随机调用,并且永远不会返回。控制器代码中有三个这样的函数,每次我将这些函数更改为使用至少一个伪参数调用时,这个问题都会在没有任何参数()的函数上出现。一旦所有3个函数都更改为传递参数,此问题就不再出现 有人能解释一下这种随机行为

我在tomcat中托管的grails(1.3.7)应用程序中遇到了一个奇怪的问题

当应用程序持续使用时,应用程序会在某个时间点冻结(挂起状态)。在跟踪问题的过程中,我发现就在冻结时,一个参数为零的函数(例如,作为控制器代码的一部分的getLinceneInfo()函数)被随机调用,并且永远不会返回。控制器代码中有三个这样的函数,每次我将这些函数更改为使用至少一个伪参数调用时,这个问题都会在没有任何参数()的函数上出现。一旦所有3个函数都更改为传递参数,此问题就不再出现

有人能解释一下这种随机行为吗

问候,,
雷诺2.0之前,所有控制器操作都是关闭的。它们仍然受支持,但现在首选方法。为了发现应该被视为操作的闭包,将实例化控制器类并调用getter以确定其返回类型。这是因为每当Groovy类中有一个属性

def foo = ...
Groovy编译器将其转换为一个私有字段,并添加一个getter和setter,在本例中是
Object getFoo(){…}
void setFoo(Object foo){…}
。如果您已经有一个或两个方法,它们将不会被覆盖。这就是属性在域类、标记库和控制器中的工作方式。由于闭包是用
def
定义的,因此无法知道它是闭包、字符串还是其他东西,因此需要调用getter

这里最简单的解决方法是将方法名更改为不像getter。一个看起来仍然像getter的常见模式是将其更改为
licenceInfo()