gpt4 book ai didi

java - 我应该创建许多单例或单例上下文来引用我的状态和对象吗?

转载 作者:行者123 更新时间:2023-11-30 11:11:51 24 4
gpt4 key购买 nike

我在项目中使用 Guice。由于这是第一次,我想知道如何保持和传递状态,即包含一些用户输入的对象或其他地方需要的长期对象(而不是第一次注入(inject)的地方)。

例如,我的应用程序有一个用户可以启动和停止的服务器。此外,用户可以输入一些数据,这些数据导致需要保存在内存中的状态。

目前我看到两种可能性:

  1. 有一个范围为 @SingletonContext 类和一些对其他类的引用,这些类保持我的状态并为我提供某些功能。Context 类可以让我访问 Server 实例、用户数据、其他服务等。Context 的实例可以由 Guice 注入(inject)。因此,如果我想停止我的服务器,我需要 Context 作为依赖项(而不是服务器)。

这有点违背 Guice 网站上的建议(注入(inject)直接依赖项而不是使用链式 getter 访问“真实”依赖项)。

  1. @Singleton 注释所有类,这些类应该只存在一次并被注入(inject)到其他几个类中。因此,我将只有一个单例服务器,某处有一个包含用户数据的类等。

单例模式 (GoF) 被认为是糟糕的设计。因此,我想知道我是否应该尽量减少 @Singleton 的使用,或者这是否是一个不同的故事,通常使用 Guice 分别依赖注入(inject)。

还有其他可能性或更好的方法吗?

最佳答案

我认为您的大部分问题都与依赖注入(inject)范例有关。首先,使用 DI 并不意味着每个托管 bean 都应该是 Singleton。托管 bean 有自己的生命周期。它们可以在每次访问/请求/ session 时实例化或作为单例实例化。

您应该关心的另一件事是我们通常使用 DI 连接我们的主要应用程序设计。你应该考虑你的域对象及其关系而不是 DI(Guice/Spring)。

例如,在您的情况下,如果您需要 bean 中的服务对象,那么您就拥有这两个类之间的关系,而无需与 Context 建立关系!

如果不同用户插入的数据对所有用户都是可见的,那么在您的应用程序中将服务设为单例。如果每个用户的 Server bean 的状态不同,那么将 bean Session 的范围设置为允许每个用户都有自己的 Server bean。

关于java - 我应该创建许多单例或单例上下文来引用我的状态和对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27193082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com