【发布时间】:2014-11-28 16:54:04
【问题描述】:
我在一个项目中使用 Guice。由于这是第一次,我想知道如何保持和传递状态,即包含一些用户输入的对象或其他地方需要的长寿命对象(不是第一次注入的地方)。
例如,我的应用程序有一个用户可以启动和停止的服务器。此外,用户可以输入一些数据,这些数据会导致需要保存在内存中的状态。
目前我看到了两种可能性:
- 有一个
Context类,其范围为@Singleton以及对其他类的一些引用,这些类可以保持我的状态并为我提供某些功能。Context类可以让我访问Server实例、用户数据、其他服务等。Context的实例可能由 Guice 注入。 因此,如果我想停止我的服务器,我需要Context作为依赖项(而不是服务器)。
这有点违背 Guice 网站上的建议(注入直接依赖项,而不是使用链式 getter 访问“真实”依赖项)。
- 用
@Singleton注释所有应该只存在一次并被注入到其他几个类中的类。因此,我将只有一个单例服务器,在某个地方有一个包含用户数据的类,等等。
单例模式 (GoF) 被认为是糟糕的设计。因此,我想知道是否应该尽量减少 @Singleton 的使用,或者这是否是使用 Guice 分别依赖注入的不同故事。
还有其他可能性或更好的方法吗?
【问题讨论】:
-
单例模式 (GoF) 与单例范围不同。反对单例模式的论点通常不适用于单例范围。
标签: java architecture singleton guice