2017-09-01 162 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