【问题标题】:Accessing a Guice singleton from Injector从 Injector 访问 Guice 单例
【发布时间】:2020-09-19 18:25:42
【问题描述】:

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

@Provides
@Singleton
public LinkedBlockingQueue<String> provideLinkedBlockingQueue() {
    return new 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();

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

【问题讨论】:

    标签: java dependency-injection singleton guice


    【解决方案1】:

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

    不,不是。

    您应该使用Key&lt;LinkedBlockingQueue&lt;String&gt;&gt; 或TypeLiteral&lt;LinkedBlockingQueue&lt;String&gt;&gt; 而不是LinkedBlockingQueue.class。

    例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 2015-08-19
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      相关资源
      最近更新 更多