何时决定更改Grails控制器的范围

mon*_*nda 6 grails scope

Grails控制器的默认范围是,prototype将为每个请求创建一个新的控制器(推荐用于Closure属性的操作)

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

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

singleton - 只存在一个控制器实例(建议将操作用作方法)

我什么时候应该使用哪个范围?我什么时候可以决定改变范围?在什么情况下?

mic*_*cha 10

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

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

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

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