【问题标题】:When to decide to change the scope of a Grails controller何时决定更改 Grails 控制器的范围
【发布时间】:2013-09-18 14:37:20
【问题描述】:

Grails 控制器的默认范围是prototype,即将为每个请求创建一个新控制器(建议作为闭包属性的操作)

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

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

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

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

【问题讨论】:

    标签: grails scope


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 在控制器中存储静态信息是什么意思?例如,如果我使用单例并且我有 4 个方法也调用具有单例范围的服务,那么多个用户在同一个控制器中同时调用同一个方法应该没有任何问题吗?例如,多个并发用户调用/访问同一控制器的 uploadPhoto 方法/操作。你能解释一下吗? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    相关资源
    最近更新 更多