Java 我应该创建多个单例上下文还是引用我的状态和对象的单例上下文?
我正在一个项目中使用Guice。由于这是第一次,我想知道如何保持和传递状态,即包含一些用户输入的对象或其他地方需要的长寿命对象(不是第一次注入的地方) 例如,我的应用程序有一个服务器,用户可以启动和停止它。此外,用户可以输入一些数据,这些数据导致需要保存在内存中的状态 目前,我看到两种可能性:Java 我应该创建多个单例上下文还是引用我的状态和对象的单例上下文?,java,architecture,singleton,guice,Java,Architecture,Singleton,Guice,我正在一个项目中使用Guice。由于这是第一次,我想知道如何保持和传递状态,即包含一些用户输入的对象或其他地方需要的长寿命对象(不是第一次注入的地方) 例如,我的应用程序有一个服务器,用户可以启动和停止它。此外,用户可以输入一些数据,这些数据导致需要保存在内存中的状态 目前,我看到两种可能性: 拥有一个范围为@Singleton的上下文类,以及一些对保持我的状态并为我提供某些功能的其他类的引用。 上下文类将允许我访问服务器实例、用户数据、其他服务等。 Guice可以注入上下文的实例。 因此,如果
@Singleton
的上下文
类,以及一些对保持我的状态并为我提供某些功能的其他类的引用。
上下文
类将允许我访问服务器
实例、用户数据、其他服务等。
Guice可以注入上下文的实例。
因此,如果我想停止服务器,我需要上下文
作为依赖项(而不是服务器)
@Singleton
注释所有应该只存在一次并注入其他几个类中的类。所以,我只有一个单例服务器,在某个地方有一个包含用户数据的类,等等@Singleton
,或者这是一个不同的故事,通常使用Guice依赖注入
还有其他的可能性或更好的方法吗?我想你的大多数问题都与依赖注入范式有关。首先,使用DI并不意味着每个托管bean都应该是单例的。托管bean有自己的生命周期。它们可以在每个访问/请求/会话上实例化,也可以是单例的 您应该关心的另一件事是使用DI,我们通常会连接我们的主要应用程序设计。您应该考虑域对象及其关系,而不是DI(Guice/Spring) 例如,在您的例子中,如果您需要一个bean中的服务对象,那么您就有了这两个类之间的关系,而不需要有与上下文的关系 如果不同用户插入的数据对所有用户都可见,那么在应用程序中使服务成为单例服务。如果每个用户的服务器bean的状态不同,那么请设置bean会话的作用域,以允许每个用户拥有自己的服务器bean。单例模式(GoF)与单例作用域不同。反对singleton模式的参数通常不适用于singleton范围。