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进行配置就可以了解
列表