【问题标题】:guice injector getInstance of annotated singleton instanceguice 注入器 getInstance 带注释的单例实例
【发布时间】:2017-09-01 08:53:15
【问题描述】:

我正在使用带有 Guice 的 Restlet。

我的 Guice 中定义了一个 CachedThreadPool:

@Provides
@Singleton
@Named("name0")
public ExecutorService provideAutoDisconnectThreadPool () {
    return Executors.newCachedThreadPool();
}

想在服务器停止时关闭线程池,所以在我的restlet.Application中,我使用注入器来获取实例:

@Override
public void stop() throws Exception {
    LOGGER.info("stopping...");
    // shutdown threadPool
    injector.getInstance(ExecutorService.class).shutdown();
    super.stop();
    LOGGER.info("stopped");
}

但是,程序出现以下错误:

com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for java.util.concurrent.ExecutorService was bound.
 while locating java.util.concurrent.ExecutorService

1 error
at    com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1009)

那么,当应用程序停止时,如何获取线程池实例。

【问题讨论】:

    标签: java guice restlet


    【解决方案1】:

    Named 是一个binding annotation,所以在这种情况下注入密钥是ExecutorService.class @Named("name0")

    injector.getInstance(Key.get(ExecutorService.class, Names.named("name0")))
    

    【讨论】:

    • 可行, T getInstance(Key var1) 是解决方案,谢谢
    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多