java Google Guice注入实现确保单例

2izufjch  于 2023-05-15  发布在  Java
关注(0)|答案(1)|浏览(154)

我有一个用例,在Guice模块中,我提到过对于我的接口MyInterface,像这样绑定这个实现MyImplementation-
bind(MyInterface.class).as(MyImplementation.class).asEagerSingleton();
我有另一个名为的类,它需要直接依赖MyImplementation,我注入它就像-

@AllArgsConstructor(onConstructor = @__(@Inject))
class TestingClass {
  private MyImplementation myImplementation;
}

然而,这样做的问题是,如果你直接在代码中的某个地方注入MyImplementation,它将不会是MyInterface使用的同一个示例,即使你在Guice中将MyInterface绑定到MyImplementation作为一个单例。这是因为当您直接注入一个类时,Guice会使用该类的构造函数创建该类的新示例,而不需要经过绑定过程。换句话说,MyImplementation的注入绕过了Guice的依赖注入机制。
有没有一种方法可以确保注入到类TestingClass中的示例与MyInterface在任何地方注入时使用的示例相同?我不能在TestingClass中注入MyInterface而不是MyImplementation
我也试过使用Provider-

class TestingClass {
  @Inject
  Provider<MyImplementation> myImplementationProvider;

  public void something() {
    MyImplementation myImpl = myImplementationProvider.get();
  }

}

但似乎这也不起作用。有什么方法可以确保这种单例行为?

wwwo4jvm

wwwo4jvm1#

您可以将实现绑定为单例,然后将接口绑定到实现:

bind(MyImplementation.class).asEagerSingleton();
bind(MyInterface.class).to(MyImplementation.class);

相关问题