spring 的单例作用域 bean 在 Web 应用程序中的行为如何?
How singleton scoped bean of spring behaves in web application?
在查看代码时,我发现所有 bean 在 Web 应用程序中都被定义为单例。这让我想到当多个线程试图访问这个 bean 时会发生什么。它不会降低性能吗?例如,我有一个单例登录 bean,现在假设有多个用户尝试登录。现在因为 bean 是单例的,所以所有用户都会得到相同的 bean.Will 它不会降低性能吗?还是有别的东西?
你的问题有答案的暗示,因为你说的是线程,一般来说,代码不是"alive",线程是。作为一个比喻,线程是 "alive" 和 "performing",通过读取就在那里的共享代码。 您可以将代码想象成写在白板上,线程正在执行读取它的工作。
如果共享 bean 具有一些线程需要更改的状态(比如变量),则情况不同。延伸比喻,这就像写在白板上的一个数字,每个人都大声改变。
现在,需要一些方法来确保线程不会覆盖彼此的工作。因此,需要某种类型的同步。单个 bean(实际上是其中的可更新状态)成为线程竞争的资源,一个可能必须等待另一个完成。这可能会降低性能。如果操作不当,也会导致错误和死锁。
程序员必须注意这一点。因为 Spring 提供了不同的范围来定义 beans 的创建。有关 spring here.
范围的更多信息
bean单例范围的实现方式不同于单例设计模式。每个 spring 容器一个 bean。有关 spring 个容器的更多信息 here。
在查看代码时,我发现所有 bean 在 Web 应用程序中都被定义为单例。这让我想到当多个线程试图访问这个 bean 时会发生什么。它不会降低性能吗?例如,我有一个单例登录 bean,现在假设有多个用户尝试登录。现在因为 bean 是单例的,所以所有用户都会得到相同的 bean.Will 它不会降低性能吗?还是有别的东西?
你的问题有答案的暗示,因为你说的是线程,一般来说,代码不是"alive",线程是。作为一个比喻,线程是 "alive" 和 "performing",通过读取就在那里的共享代码。
如果共享 bean 具有一些线程需要更改的状态(比如变量),则情况不同。延伸比喻,这就像写在白板上的一个数字,每个人都大声改变。
现在,需要一些方法来确保线程不会覆盖彼此的工作。因此,需要某种类型的同步。单个 bean(实际上是其中的可更新状态)成为线程竞争的资源,一个可能必须等待另一个完成。这可能会降低性能。如果操作不当,也会导致错误和死锁。
程序员必须注意这一点。因为 Spring 提供了不同的范围来定义 beans 的创建。有关 spring here.
范围的更多信息bean单例范围的实现方式不同于单例设计模式。每个 spring 容器一个 bean。有关 spring 个容器的更多信息 here。