【发布时间】:2014-12-30 01:19:00
【问题描述】:
我了解 Grails 非常努力地实现无状态,但是我需要我的一个控制器保留一个特定的 fizz 值,该值应该在每个 HTTP 请求中找到:
class MyController {
List<Fizz> cachedFizzes = new ArrayList<Fizz>()
def index() {
Fizz fizz = extractFizz(params)
cachedFizzes << fizz
...
}
...
}
但是,在本地测试此方法时,似乎 cachedFizzes 会随着每个 HTTP 请求重新实例化,因此无论我调用此控制器的某个操作多少次,Fizzes 的列表都不会增长。
所以我问:我如何(具体)将List<Fizz> 注入List<Fizz>,该List<Fizz> 将在应用程序 的整个生命周期中存在并增长(而不是控制器/HTTP 请求)?
【问题讨论】:
-
“我需要我的一个控制器来保留一个特定的 fizz 值,该值应该在每个 HTTP 请求中找到”——这听起来像是一个错误的要求。我希望,如果您深入研究并弄清楚实际需求是什么,您最终会得到一个更好的解决方案。我无法准确猜测实际要求是什么,但我敢打赌,这可能更像是您需要访问每个请求中的特定值,而不是需要在控制器实例中维护该值尤其是,这几乎肯定是错误的做法。
-
更常见且问题较少的事情通常涉及在控制器之外的某处维护该状态,例如可以但不必是服务的单例 bean。您可能仍然希望您的控制器是单例的,但这并不是因为这可以帮助您完成您在此处尝试做的事情。
标签: grails caching model-view-controller singleton stateless