Grails如何使“params”可用于Singleton控制器?(圣杯内部)



如果我通过使Grails控制器成为单例控制器

static scope = "singleton"

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

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

这是如何在幕后实现的

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

在后台,这是通过将org.codehaus.groovy.grails.plugins.web.api.ControllersApi中的AST转换混合到控制器类中来实现的,该转换添加了getParams()(可以用作params属性)等方法。这些调用RequestContextHolder.currentRequestAttributes()来获取线程本地信息。

最新更新