当前位置: 首页 > 知识库问答 >
问题:

Guice:如何在没有注入器或使用构造函数注入的情况下获取Singleton实例

孙福
2023-03-14

我有一个单例类定义为:

@Singleton
class MySingletonClass{
   ....
}

我有另一个类使用这个单例类,但这个类必须使用新操作符创建。因此,我不能使用构造函数注入或setter注入等。

class MyClass {
   public void method() {
       // Uses instnace of MySingletonClass
   }
}

我当然可以将此实例传递到MyClass的构造函数中,但从我的程序上下文来看,这不是一个很好的设计。

另一个解决方案是为MySingletonClass创建一个静态getInstance方法,这样我就可以从程序中的任何地方获取实例。但我想知道Guice是否支持类似的东西?我相信Guice可以允许在任何地方获取单例实例。

非常感谢。

共有1个答案

彭鹭洋
2023-03-14

我认为,如果myClass需要MySingletonClass,这意味着它们之间存在明显的依赖关系,因此正确的解决方案是将MySingletonClass的实例传递给myClass的构造函数。

构造函数注入是最理想的注入方法之一,因为它使依赖项显式化,并防止创建具有未满足依赖项的MyClass。如果你真的不喜欢构造函数注入,你可以使用setter注入,在这里你可以手动注入MySingletonClass的实例。

 类似资料:
  • 我试图了解DI在我们的代码库(Kotlin)中是如何使用的。我们正在使用googleguice进行依赖注入。 下面是一个示例类: 在模块类中: DepB类别: 据我所知,对于用< code>@Inject注释的变量,Google Guice会使用模块类来解决这些依赖关系。所以< code>DepA对象的注入方式是有意义的。 但是呢?我们如何能够在不指定任何位置的情况下注入DepB?

  • 有人能帮助实现没有注释的Guice吗? pom。xml 我所尝试的: 我得到的错误是: 我理解这个错误。 但是我希望我可以“指向”Guice到正确的构造函数......而不是使用注释。 如您所见,使用默认/空构造函数不是一个好选择,因为这个示例很简单,但我想坚持使用基于构造函数的注入。 附加: 根据我在评论中从赫曼特·辛格那里得到的“暗示”,我想我离得更近了。 我创建了一个ProductionIn

  • 我有很多Android ViewModel类,它们往往有很多依赖项(大多数是Room中的DAO,每个SQLite表一个)。有些依赖项超过10个。 这很好,但Inject构造函数充满了参数,并且只包含样板代码,用于从构造函数参数设置注入的成员。 我想切换到“常规”注入成员,使用注释单独标识,就像其他(哑)类一样。 这对于与Android相关的类(尽管ViewModel被宣传为非Android依赖,例

  • 问题内容: 如果你看一下课堂上的代码,我有两个问题: 服务器启动时,如果我在此类的构造函数中放置一个断点,就像在构造函数中那样,它是由spring使用配置的bean 提供的。但是,构造函数上没有注释,那么,在这个世界中如何以正确的依赖关系调用该构造函数?应该是null。 这是Spring Boot的自动假设吗? Spring是否看到“私有字段+构造函数参数”,并且假定它应该寻找合适的bean? 是

  • 问题内容: 我正在阅读Guice文档,并且遇到了一个标题为“ 消除周期”(推荐)的部分,这引起了我的极大兴趣,因为正是这个问题才导致我今天使用该文档。 基本上,要消除循环依赖性,您可以“将依赖性案例提取到单独的类中”。 好的,那里没有新内容。 因此,在示例中,我们有。 您有一个和一个,每个都需要引用的一个实例。这个概念没有问题,并且可以通过经典的依赖注入轻松实现: 这很容易,但是现在,我需要通过G

  • 我有一个类,我需要注入一个变量,但构造函数没有注入guice。 x的值未被注入。guice是否有必要在构造函数中使用注入来识别方法注入?我是否需要从其他类调用此方法才能工作?Thanx提前