Java 从Injector访问Guice单例

Java 从Injector访问Guice单例,java,dependency-injection,singleton,guice,Java,Dependency Injection,Singleton,Guice,我正在使用Guice在Java应用程序中创建一个单例。我在模块类中使用了以下方法: @Provides @Singleton public LinkedBlockingQueue<String> provideLinkedBlockingQueue() { return new LinkedBlockingQueue<>(); } @提供 @独生子女 公共LinkedBlockingQueue提供LinkedBlockingQueue(){ 返回新的Link

我正在使用Guice在Java应用程序中创建一个单例。我在模块类中使用了以下方法:

@Provides
@Singleton
public LinkedBlockingQueue<String> provideLinkedBlockingQueue() {
    return new LinkedBlockingQueue<>();
  }
@提供
@独生子女
公共LinkedBlockingQueue提供LinkedBlockingQueue(){
返回新的LinkedBlockingQueue();
}
在另一个类中,我尝试通过以下方式获取实例:

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();
公共类资源{
私有最终LinkedBlockingQueue缓冲队列;
@注入
公共资源(LinkedBlockingQueue缓冲队列){
this.bufferQueue=bufferQueue;
}
最后,我想从我的注入器访问应用程序中的同一个实例,我试着这样做:

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();
LinkedBlockingQueue缓冲队列=
getProvider(LinkedBlockingQueue.class).get();
这是在资源类和应用程序中从注入器共享实例的正确方法吗

这是在资源类和应用程序中从注入器共享实例的正确方法吗

不,不是

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

例如:

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