这两个注解的出现可以仅仅在代码中就将Bean加入到IOC容器中,Spring 3.0开始就支持了,之前我们将Bean加入到IOC容器中都是需要在配置文件里配置扫描路径的,使用这两个的组合就可以完全不使用xml配置,只是用代码就将Bean纳入Spring IOC容器的管理范畴了,使用方式如下:
@Configuration
public class HttpClientAutoConfiguration {
/**
* httpclient bean 添加到IOC容器
* @Bean默认是单实例的
* @return
*/
@Bean
public HttpClient httpClient() {
// 构建requestConfig
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(properties.getConnectTimeOut())
.setSocketTimeout(properties.getSocketTimeOut()).build();
// 构建httpclient客户端
HttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig)
.setUserAgent(properties.getAgent())
.setMaxConnPerRoute(properties.getMaxConnPerRoute())
.setMaxConnTotal(properties.getMaxConnTotal())
.addInterceptorFirst(logbookHttpRequestInterceptor)
.addInterceptorFirst(logbookHttpResponseInterceptor)
.build();
return client;
}
}
还有一种情况就是方法带参数,参数值是从Spring IOC容器中自动装配的,这个参数httpclient需要注入到IOC容器中,先根据类型注入,类型冲突的话再根据名字注入。
@Bean
RestTemplate directRestTemplate(HttpClient httpclient) {
RestTemplate template = new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpclient));
template.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("utf-8")));
template.getMessageConverters().add(1, new FastJsonHttpMessageConvert5());
return template;
}