我有豆子:
@Bean
public Map<String, Integer> currenciesCodesMap(@Value("${readTimeoutMillis}") int readTimeout,
@Value("${connectTimeoutMillis}") int connectTimeout,
UriFactory uriFactory) {
System.out.println("currenciesCodesMap");
RestTemplate restTemplate = getRestTemplate(readTimeout + 1, connectTimeout + 1);
List<Map> maps = Arrays.asList(Objects.requireNonNull(restTemplate.getForObject(uriFactory.getProgressiveCurrencyRates(), Map[].class)));
Map<String, Integer> currenciesCodesMap = maps.stream().collect(Collectors.toMap(
map -> (String) map.get("code"),
map -> (Integer) map.get("id")
));
}
@Bean
public RestTemplate codesConverterRestTemplate(@Value("${readTimeoutMillis}") int readTimeout,
@Value("${connectTimeoutMillis}") int connectTimeout,
UriFactory uriFactory) {
System.out.println("codesConverterRestTemplate");
return getRestTemplate(readTimeout, connectTimeout);
}
@Bean
public RestTemplate getRestTemplate(int readTimeout, int connectTimeout) {
CloseableHttpClient httpClient = HttpClientBuilder.create().disableCookieManagement().build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
factory.setReadTimeout(readTimeout);
factory.setConnectTimeout(connectTimeout);
System.out.println("getRestTemplate");
return new RestTemplate(factory);
}
我不想在每个 bean 中创建新的 RestTemplate,所以我决定在另一个 bean 中创建它,并将第三个 bean 注入到前两个 bean 中。在启动时,我看到(使用 System.out.println)我的 bean 只创建了一个(因为它们是单例),但我不明白它是怎么回事,因为我使用不同的参数在前两个 bean 中调用第三个 bean。所以我的问题是:这整个事情是如何运作的。new RestTemplate(factory) 将被调用多少次,如果我在两个具有不同参数的地方使用它,它怎么可能是对第三个 bean 的一次调用。以这种方式创建 RestTemplate 是一种好方法吗
慕村9548890
相关分类