【问题标题】:Shared scope in Spring ControllerSpring Controller 中的共享范围
【发布时间】:2017-11-08 12:11:21
【问题描述】:

我有一个 Spring Web 应用程序,它有一个主控制器实例化一个对象,例如:

@Controller
public class testController {

private Boom boom = new Boom();

}

例如,此对象有一个 Get 方法来显示字符串数组列表供用户编辑和保存。

但是如果有 2 个会话打开,如果我在其中一个上编辑列表并保存,然后刷新它显示在那个会话上的第二个会话(第二个浏览器)。我不希望这种情况发生。 我希望控制器使该对象对于查看应用程序的每个用户都是唯一的

我有哪些选择范围?

【问题讨论】:

  • 如果您想在不同用户的会话之间共享对象,请考虑将对象范围设置为gloabal-sessionsingleton 在此处阅读更多内容tutorialspoint.com/spring/spring_bean_scopes.htm
  • 您不能将 Boom 设置为请求或会话范围 bean 吗?或者只是动态创建它而不是尝试重用一个实例
  • @StanislavL 我已经阅读并使用了@Scope("session") 来确定控制器的范围,因为应用程序很小,所以我可以为每个会话使用一个新控制器。否则,确定 Boom 的范围也可以正常工作!谢谢
  • @Travisty , Controller 必须是单例作为最佳实践,您应该将 Boom bean 范围设置为 Session
  • @Travisty,如果你喜欢我的回答,别忘了点赞并接受,谢谢。

标签: java spring session scope


【解决方案1】:

作为最佳实践,Controller 对象必须是 Singleton,并且它们正在使用的 bean 应该根据它们的功能具有适当的范围。

在您的情况下,由于 bean Boom 在用户会话中的多个请求中使用,因此您应该创建范围为 SessionBoom

详细了解 Spring 作用域 herehere

【讨论】:

    猜你喜欢
    • 2010-12-09
    • 2016-01-24
    • 2019-01-11
    • 2014-01-12
    • 2014-04-17
    • 2012-06-23
    • 2011-11-11
    • 1970-01-01
    • 2021-02-17
    相关资源
    最近更新 更多