为啥 Spring RestTemplate 在 Spring 中默认不是 Bean?

Posted

技术标签:

【中文标题】为啥 Spring RestTemplate 在 Spring 中默认不是 Bean?【英文标题】:Why Spring RestTemplate is not a Bean by default in Spring?为什么 Spring RestTemplate 在 Spring 中默认不是 Bean? 【发布时间】:2019-06-11 17:53:27 【问题描述】:

在 Spring Boot 项目中使用 REST 调用时,由于我是个懒人,我的手很快就去键盘上为 Spring 的 RestTemplate 编写一个配置,如下所示:

  @Bean
  public RestTemplate restTemplate() 
    return new RestTemplate();
  

这是为了不每次都实例化它。 为什么我们不将它默认配置为 Bean?

【问题讨论】:

【参考方案1】:

为什么我们不把它默认配置为一个 Bean?

尽管可能有点烦人,但 Spring Boot 团队有充分的理由默认不将 RestTemplate 声明为 @Bean。参考documentation中有解释:

由于 RestTemplate 实例在使用前通常需要自定义,因此 Spring Boot 不提供任何单个自动配置的 RestTemplate bean。

不过,它确实会自动配置一个 RestTemplateBuilder,它可用于在需要时创建 RestTemplate 实例


对于新的WebClient,Spring Boot 出于同样的原因只创建WebClient.Builder(感谢Darren Forsythe 指出)

【讨论】:

以上是关于为啥 Spring RestTemplate 在 Spring 中默认不是 Bean?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在使用 RestTemplate 获取数据时总是得到 403? [复制]

为啥基本身份验证总是使用 restTemplate 给出错误 403?

为啥 RestTemplate 中没有类似 postForEntity 的 patchForEntity 方法?

Spring RestTemplate 专题

Spring的RestTemplate

Spring RestTemplate 之get请求