Java 使用Spring@Configuration构建rest模板
假设我有一些应用程序范围的配置:Java 使用Spring@Configuration构建rest模板,java,spring,Java,Spring,假设我有一些应用程序范围的配置: @Configuration public class RestTemplateConfiguration { @Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public HttpClient anHttpClient() { PoolingHttpClientConnectionManager poolingHttpClientConnectionManage
@Configuration
public class RestTemplateConfiguration {
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public HttpClient anHttpClient() {
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();
// set some properties
// ...
return HttpClientBuilder.create().setConnectionManager(poolingHttpClientConnectionManager).build();
}
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public ClientHttpRequestInterceptor aRequestInterceptor() {
....
}
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public ClientHttpRequestInterceptor anotherRequestInterceptor() {
....
}
}
然后我有一些特殊的服务,看起来像:
@Service
public class MyService {
private final RestTemplate myParticularRestTemplate;
@Autowired
public MyService(RestTemplate myParticularRestTemplate) {
this.myParticularRestTemplate = myParticularRestTemplate;
}
/***
* Some incredible application logic
***/
@Configuration
public static class Config {
private int SOME_READ_TIMEOUT;
private int SOME_CONNECT_TIMEOUT;
@Bean
public RestTemplate myParticularRestTemplate(HttpClient anHttpClient, List<ClientHttpRequestInterceptor> interceptors) {
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(anHttpClient);
clientHttpRequestFactory.setReadTimeout(SOME_READ_TIMEOUT);
clientHttpRequestFactory.setConnectTimeout(SOME_CONNECT_TIMEOUT);
RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory);
restTemplate.setInterceptors(interceptors);
return restTemplate;
}
}
}
@服务
公共类MyService{
私有最终RestTemplate MySpecialRestTemplate;
@自动连线
公共MyService(RestTemplate MySpecificularRestTemplate){
this.mySpecificularRestTemplate=mySpecificularRestTemplate;
}
/***
*一些不可思议的应用逻辑
***/
@配置
公共静态类配置{
private int一些读取超时;
私有int某些连接超时;
@豆子
公共RestTemplate MySpecialRestTemplate(HttpClient anHttpClient,列表拦截器){
HttpComponents客户端HttpRequestFactory客户端HttpPrequestFactory=新的HttpComponents客户端HttpRequestFactory(anHttpClient);
setReadTimeout(一些读取超时);
setConnectTimeout(一些连接超时);
RestTemplate RestTemplate=新的RestTemplate(clientHttpRequestFactory);
restTemplate.setInterceptors(拦截器);
返回REST模板;
}
}
}
我希望将拦截器注入到restemplate
的系统范围内,但是,事实上,因为我必须访问restemplate
的嵌套对象来设置特定的配置,所以我需要自己实例化restemplate
,至少在我理解的情况下是这样
有没有一种更好的方法来解决这个问题,即不需要对特定的restemplate
s进行配置就可以了解列表