Java 单身汉在春天是如何工作的?

Java 单身汉在春天是如何工作的?,java,spring,singleton,Java,Spring,Singleton,Spring的默认设置是bean的单例。那么这是否意味着当100个用户访问同一个站点(服务或bean)时,这100个会话是以线程方式共享该服务bean的单个实例,还是将创建100个bean,并且每个会话都有自己的bean。如果是后者,那么单例模式如何应用于它?有人能给我们提供一个可能的代码示例,让我们自己看看。这是前者。使用singleton只能得到一个对象。每个会话可以获得一个对象,但我相信这是一个不同的关键字 Singleton意味着在应用程序/进程的生命周期内,将为给定类创建一个实例。因此

Spring的默认设置是bean的单例。那么这是否意味着当100个用户访问同一个站点(服务或bean)时,这100个会话是以线程方式共享该服务bean的单个实例,还是将创建100个bean,并且每个会话都有自己的bean。如果是后者,那么单例模式如何应用于它?有人能给我们提供一个可能的代码示例,让我们自己看看。

这是前者。使用singleton只能得到一个对象。每个会话可以获得一个对象,但我相信这是一个不同的关键字

Singleton意味着在应用程序/进程的生命周期内,将为给定类创建一个实例。因此,如果100个用户访问同一个bean,他们所有人都将获得相同的实例。

那么这是否意味着所有这100个会话/用户以线程方式共享一个实例?所以这意味着如果用户数量增加(比如说1000),可能会有饥饿来抓住那个实例,对吗?我不知道你在说什么饥饿。如果您创建了许多线程,那么您可能会开始耗尽资源,但是访问单个线程与线程的数量无关。按照单例模式,每个应用程序上下文应该只有一个HelloController实例。那么,如果有100个httprequest同时命中这个控制器,它是如何工作的呢?当此控制器处理第一个请求时,其他999请求是否必须等待。它是如何工作的?@Gurkhali,您描述的是同步(),只有在类中执行某种锁定时才会发生。控制器和其他“共享”资源应以无状态的方式编写,以便多个线程可以使用它们,而不会出现问题或需要锁定。换句话说,没有固有的同步,所有100个请求/线程将同时使用控制器(因此请确保您的代码是线程安全的!)除非显式同步访问。