【问题标题】:Why Spring controllers are singleton for REST implementations?为什么 Spring 控制器对于 REST 实现来说是单例的?
【发布时间】:2014-01-12 10:22:35
【问题描述】:

对于 Spring 中的 REST 实现,spring 控制器是单例的。我想知道为什么除了线程安全问题之外,弹簧控制器是单例的。请帮助解决此问题。

【问题讨论】:

  • Rest 实现应该是无状态的,因此不需要有状态的 bean。
  • 能否请您投票/接受答案,因为它在stackoverflow.com/help/someone-answers 中有详细说明?谢谢
  • @Ralph 如果我们自动装配一个 HttpSession 会怎样?不应该再次实例化控制器吗?
  • @Hola Soy Edu Feliz Navidad:REST 旨在实现无状态:因此,如果您需要在控制器中使用 http 会话,那么您很可能没有 REST API
  • @Ralph 那么,您将如何检查当前用户是谁?解码令牌?

标签: spring


【解决方案1】:

这与 REST 无关。

默认情况下,Spring bean 是单例范围的。由于扫描@Controller 注释类的组件只会生成一个bean,因此该bean 将是单例范围的。

关于@Controller bean 应该是无状态的原因,请阅读以下任何内容:

为了跟进 REST 问题,REST 意味着是无状态的。换句话说,每个请求都包含服务器处理它所需的所有信息。知道这一点,服务器(或@Controller) 在处理完实例字段等请求后保留任何信息是没有意义的。因此,单例是要走的路。

【讨论】:

    猜你喜欢
    • 2019-10-04
    • 2018-10-06
    • 2018-04-28
    • 1970-01-01
    • 2018-12-05
    • 2020-08-02
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    相关资源
    最近更新 更多