2017-09-01 124 views
1

我正在使用Restice和Guice。guice注入器getInstance注释的单例实例

一个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) 

所以,我怎么能得到应用程序停止时的threadPool实例。

回答

3

Namedbinding annotation,所以在这种情况下,注入键是ExecutorService.class@Named("name0")

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

该作品,Ť的getInstance(键 VAR1)是溶液,THX – RTzhong