我在 tomcat 中托管的 grails (1.3.7) 应用程序面临一个奇怪的问题。
当应用程序持续使用时,应用程序会在某个时间点卡住(挂起状态)。在跟踪问题时,我发现只是在卡住具有零参数的函数之一(例如,作为 Controller 代码的一部分的 getLinceneInfo())被随机调用并且永远不会返回。 Controller 代码中有三个这样的函数,每次我将这些函数更改为使用至少一个虚拟参数调用时,这个问题就体现在没有任何参数 () 的函数上。一旦将所有 3 个函数都更改为传递参数,此问题就不会再次出现。
有人可以对这种随机行为有所了解吗?
问候,
雷诺
最佳答案
在 2.0 之前,所有 Controller 操作都是闭包。它们仍然受支持,但现在首选方法。为了发现应该被视为 Action 的闭包,您的 Controller 类被实例化并调用 getter 以确定它们的返回类型。这是因为每当您在 Groovy 类中有一个看起来像
def foo = ...
发生的情况是,Groovy 编译器将其转换为私有(private)字段,并添加了 getter 和 setter,在本例中为
Object getFoo() { ... }
。和 void setFoo(Object foo) { ... }
.如果您已经拥有这些方法中的一种或两种,它们将不会被覆盖。这就是属性在域类、标记库和 Controller 中的工作方式。由于闭包是用 def
定义的没有办法知道它是闭包,还是字符串,或者其他什么,所以需要调用 getter。这里最简单的解决方法是将方法名称更改为看起来不像 getter。一种看起来仍然像 getter 的常见模式是将其更改为
licenceInfo()
.
关于grails - 在 grails Controller 中使用没有参数 () 的函数是否存在问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27170971/