如何 – Spring IoC和HttpClient 4.3.1 CloseableHttpClient?

我想让Spring IoC配置一个CloseableHttpClient对象并将其注入我的类中,以便可以通过XML完成其配置的自定义。

从我所看到的, HttpClient似乎非常强烈地抵制这种模式。 他们希望你做的事情

 CloseableHttpClient chc = HttpClients.custom().set().build(); 

伊克。

是不是有一些机制可以制作一个我可以使用的单例CloseableHttpClient bean?

这似乎对我有用:

          

这给了我一个“httpClient”bean中的CloseableHttpClient,配置了套接字和连接超时。 您应该能够向requestConfigBuilder或httpClientBuilder添加更多属性。

使用Java配置,这很简单

 @Bean public CloseableHttpClient httpClient() { HttpClientBuilder builder = HttpClientBuilder.create(); builder.setEverything(everything); // configure it CloseableHttpClient httpClient = builder.build(); } 

使用XML配置,它有点复杂。 您可以创建自己的FactoryBean实现,比如CloseableHttpClientFactoryBean ,它将所有调用委托给HttpClientBuilder并在getObject()调用build() getObject()

 public class CloseableHttpClientFactoryBean implements FactoryBean { private HttpClientBuilder builder; public CloseableHttpClientFactoryBean() { builder = HttpClientBuilder.create(); } ... // all the setters // for example public void setEverything(Everything everything) { // delegate builder.setEverything(everything); } public CloseableHttpClient getObject() { return builder.build(); } } 

和配置

    

每个HttpClientBuilder方法都需要一个setter方法。

请注意,如果您不需要任何自定义配置,则可以使用factory-method获取默认的CloseableHttpClient