4

如果我通过以下方式使 Grails 控制器成为单例:

static scope = "singleton"

... Grails 如何将params变量公开给我的控制器的操作,其中params特定于请求?

我会理解是否params作为变量传递到我的操作方法中,但这里params只是可用且在范围内(尽管我的控制器只有一个实例,但同时请求不同)。

这是如何在幕后实现的?

4

1 回答 1

8

每个请求都有自己的线程,因此请求、响应、参数、会话等都可用,而与控制器是单例还是为每个请求创建新的无关。如果这些变量是类中的字段,情况会有所不同,但它们不是。

在幕后,这是通过混入org.codehaus.groovy.grails.plugins.web.api.ControllersApi控制器类的 AST 转换实现的,它添加了诸如getParams()(您可以将其用作params属性)之类的方法。这些调用RequestContextHolder.currentRequestAttributes()以获取线程本地信息。

于 2013-08-28T15:47:47.697 回答