Bos*_*osh 4 grails groovy singleton metaprogramming
如果我通过以下方式将Grails控制器设为单例:
static scope = "singleton"
Run Code Online (Sandbox Code Playgroud)
... Grails如何将params变量暴露给我的控制器的操作,其中params特定于请求?
我会理解是否params作为变量传递给我的动作方法,但这里params只是可用的和范围内的(并且对于同时请求是不同的,尽管事实上我的控制器只有一个实例).
这是如何在引擎盖下实施的?
每个请求都有自己的线程,因此请求,响应,参数,会话等可用,无论控制器是单例还是为每个请求创建新的.如果这些变量是类中的字段会有所不同,但它们不是.
在引擎盖下,这是通过一个AST变换实现的,它混合org.codehaus.groovy.grails.plugins.web.api.ControllersApi到控制器类中,它添加了诸如getParams()(可以用作params属性)之类的方法.这些调用RequestContextHolder.currentRequestAttributes()获取线程本地信息.