6

Grails 控制器的默认作用域是,prototype即为每个请求创建一个新控制器(推荐作为闭包属性的操作)

控制器支持另外两个范围:

session- 为用户会话的范围创建一个控制器

singleton- 只存在一个控制器实例(推荐作为方法的操作)

我什么时候应该使用哪个范围?我什么时候可以做出改变范围的决定?在什么场景下?

4

1 回答 1

10

Prototypesession范围意味着您可以在控制器字段中存储请求/会话特定状态。然而,这不是推荐的做法,应该避免。

如果您遵循常规做法并避免控制器中的状态,您可以轻松地使用singleton范围(这是 Spring Web MVC 控制器中的默认设置)。

如果您的控制器中有状态,则必须使用prototypesession范围。

一般来说,我建议不要为控制器混合不同的范围。如果您因为习惯于prototype范围而意外地将有状态字段添加到单例控制器中,这可能是一个非常痛苦的经历。在多个并发请求/会话访问同一字段并且一切都中断之前,您不会注意到此错误。

于 2013-09-18T16:21:20.167 回答