从 Injector 访问 Guice 单例

Accessing a Guice singleton from Injector

我正在使用 Guice 在 Java 应用程序中创建单例。我在模块 class:

中使用了以下方法
@Provides
@Singleton
public LinkedBlockingQueue<String> provideLinkedBlockingQueue() {
    return new LinkedBlockingQueue<>();
  }

在另一个 class 中,我试图以这种方式获取实例:

public class Resource {
  private final LinkedBlockingQueue<String> bufferQueue;

  @Inject
  public Resource(LinkedBlockingQueue<String> bufferQueue) {
    this.bufferQueue = bufferQueue;
  }

最后,我想从我的注入器访问我的应用程序中的同一个实例,我尝试这样做:

LinkedBlockingQueue<String> bufferQueue =
        injector.getProvider(LinkedBlockingQueue.class).get();

这是在资源 class 和我的注入器应用程序之间共享实例的正确方法吗?

Is this the correct way to go about sharing an instance between the Resource class and in my application from my injector?

不,不是。

您应该使用 Key<LinkedBlockingQueue<String>>TypeLiteral<LinkedBlockingQueue<String>> 而不是 LinkedBlockingQueue.class

例如:

injector.getProvider(new Key<LinkedBlockingQueue<String>>(){}).get();