【发布时间】:2018-08-28 08:20:42
【问题描述】:
所以我的问题是关于 Spring Boot 中的单例范围。我从事过一些 Spring Boot 项目,但我从未见过使用 Prototype 范围注释的类,所以我假设在 Spring Boot 中默认定义的所有 bean 都是单例的。现在假设有 2 个线程正在访问单例 bean,那么在这种情况下,我们如何确保一个线程所做的更改不会影响另一个线程在同一个 bean 上工作。
现在您可能会说我们可以进行同步,但我还没有在 Web 应用程序中看到使用同步来避免这种情况。那么spring boot究竟是如何处理这个问题的。
【问题讨论】:
-
这其实是一个很好的问题。简短的回答:不是! Beans 应保持只读状态。如果您将它们用作全局变量(单例反模式的基本示例!),您将面临竞争条件。即使您使用原型范围,您也会面临同样的问题。或者,您可以使用其他范围,例如
request。 -
正如@BranislavLazic 已经说过的,只要您的 bean 中没有状态,单例范围就没有问题。
标签: spring spring-boot model-view-controller