Spring Boot中的Singleton范围

时间:2018-08-28 08:20:42

标签: spring spring-boot model-view-controller

所以我的问题是关于Spring Boot中的单例作用域。我从事过一些Spring Boot项目,但是我从未见过带有Prototype范围注释的类,因此我假设所有定义的bean在Spring Boot中默认都是单例的。现在假设有2个线程正在访问单例的bean,那么在那种情况下,我们如何确保一个线程所做的更改不会影响在同一bean上工作的另一个线程。

现在您可能会说我们可以进行同步,但是在Web应用程序中没有使用同步来避免这种情况的发生。因此,Spring Boot如何处理这个问题。

1 个答案:

答案 0 :(得分:3)

任何bean的默认作用域确实是Singleton。接下来,应将所有bean设计为无状态。如果Bean是无状态的,则不必担心多个线程访问同一Bean /同步。因为它们的数据不会互相修改。

无状态是什么意思?一种简单的解释方式,您不应拥有被不同线程修改的类级别字段。您的状态应存储在会话,存储库中或由客户端存储。

最后,只是为了澄清一些小问题,这不是Spring Boot问题,而是Spring Framework / Spring MVC问题。 Bean作用域是Core Framework的一部分(Spring MVC提供了更多作用域选项)。