通过guice注入使用jersey客户端的最佳实践

通过guice注入使用jersey客户端的最佳实践,jersey,guice,jersey-client,Jersey,Guice,Jersey Client,我在应用程序中使用Jersey-2.19.x调用restapi。由于jersey客户端的创建成本很高,因此我希望在API调用中重用该客户端,并因此通过guice注入来注入该客户端 以下是我的客户端GUI代码: @Provides @Singleton Client getClient() { return ClientBuilder.newClient(); } 这是我使用这种注入的类: @Inject public MyClass(Client client) { this.clie

我在应用程序中使用Jersey-2.19.x调用restapi。由于jersey客户端的创建成本很高,因此我希望在API调用中重用该客户端,并因此通过guice注入来注入该客户端

以下是我的客户端GUI代码:

@Provides
@Singleton
Client getClient() {
  return ClientBuilder.newClient();
}
这是我使用这种注入的类:

@Inject
public MyClass(Client client) {
  this.client = client;
}

public callPost(String uri) {
  // code to set web target and invoke
}

现在我的问题是,如何关闭这个注入的客户端?如果jersey客户从未关闭,会发生什么?通过依赖项注入使用jersey客户端的最佳实践是什么?

您需要一个关机挂钩

以下是一篇好文章,对于您的情况来说可能有点过头了:

如果您想让事情更简单,并且不需要关闭Jersey客户端以外的任何东西,您可以尝试以下方法:

publicstaticvoidmain(字符串参数[]){
Injector Injector=Guice.createInjector(/*模块…*/);
Client-jerseyClient=injector.getInstance(Client.class);
Runtime.getRuntime().addShutdownHook(新线程(){
@重写公共void run(){
jerseyClient.close();
}
});
//照常进行
}

您需要一个关机挂钩

以下是一篇好文章,对于您的情况来说可能有点过头了:

如果您想让事情更简单,并且不需要关闭Jersey客户端以外的任何东西,您可以尝试以下方法:

publicstaticvoidmain(字符串参数[]){
Injector Injector=Guice.createInjector(/*模块…*/);
Client-jerseyClient=injector.getInstance(Client.class);
Runtime.getRuntime().addShutdownHook(新线程(){
@重写公共void run(){
jerseyClient.close();
}
});
//照常进行
}

根据Guice文档,您应该避免注入可关闭的资源。在这里您可以找到详细的解释和可能的解决方法。根据Guice文档,您应该避免注入可关闭的资源。在这里您可以找到详细的解释和可能的解决方法。