应用程序启动时的单例

singleton at the boot of application

我正在创建一个小游戏,我想要一个游戏室和游戏室中的一堆游戏。这将是一个 spring 启动应用程序。所以我想在应用程序开始时启动 GameRoom。然后每当创建新游戏时,我都会将其添加到游戏中心的游戏列表中。是个好主意吗?或者有什么潜在的陷阱。

public class GameRoon{

   private static GameRoom instance = null;
   List<Game> games = new ArrayList();

   private GameRoom() {}

   public static GameRoom getIsntance() {
    if(instance == null) {
       instance = new GameRoom();
    }
    return instance;
  }
}

以上是我未完成的单例..我有2个问题。 1. 在 spring-boot 启动期间启动它是个好主意吗? 2. 在 spring-boot 中像这样使用单例更好还是有更好的方法来做到这一点

singleton 备受争议,您总会找到使用和不使用它的理由。

在我看来,如果您的 class 职责是保持在应用程序内共享的状态(想想带有一些数据的注册表),我认为没有任何问题。
很明显,您共享数据并且必须确保管理并发访问。

单例的主要缺点是测试:你有一个全局状态,但理想情况下,在单元测试期间你想测试一些代码而不依赖单例class(而不是模拟)。
由于 Spring,您仍然可以解决此问题:将 GameRoom 定义为 Spring bean(默认范围是 Singleton),它像任何其他 bean 一样被注入。这允许在单元测试期间模拟它,即使下面有一个单例行为。

希望对您有所帮助。