如何在guice中指定对象实例化顺序?

How to specify object instantiation order in guice?

我在两个 Guice 模块 Object1Object2 中创建了两个对象。这两个对象都使用 Object3。如何控制 Guice 将 Object1Object2Object 12 之前)实例化为 Object1 设置的 Object3 状态的顺序Object2 是必需的吗?在 spring 中,这类似于 @DependsOn。但是我在 Guice 中找不到类似的东西。

GuiceModule1
    Object1(Object3)
GuiceModule2
    Object2(Object3)

我认为可以解决这个问题的方法是在构造 Object1 时将 Object2 作为参数传递,但这听起来不正确,因为我必须这样做才能定义依赖创建顺序。

您不能通过某些注释或内置机制在 Guice 中强制执行注入顺序。

但是您可以通过要求 class Object2 持有对 Object1 的引用而不对引用做任何事情来欺骗 Guice 强制执行注入顺序。它绝对不干净,但可以轻松完成工作。

依赖注入最佳实践提示

如果可能,您应该以注入顺序无关紧要的方式重组您的 class 设计。依赖顺序应该是注入顺序的唯一驱动因素,这是 Guice 或其他 DI 框架 excel.

也许这就是 Guice 不提供这种内置机制来强制执行注入顺序的原因,因为它会带来一些其他成本,例如注释的维护,如果您的引用发生巨大变化,甚至会产生一些矛盾,因此注释将与您的依赖关系图所说的相反。我想你明白我要去哪里了。

如果没有关于您的应用程序的更多信息,就很难给出如何操作的建议"better"。

无论如何,希望对您有所帮助!