gpt4 book ai didi

java - 在 Spring Boot 中定义 beans 有什么意义?

转载 作者:行者123 更新时间:2023-12-02 09:24:13 24 4
gpt4 key购买 nike

我对 java 和 spring boot 世界还很陌生,所以一些明显的事情对我来说可能不那么明显。我希望这个问题适合 stackoverflow...

我有一个 Spring Boot 服务,其中有一些开放的 REST API Controller 以及这些 Controller 与之交互的一些服务类。某些服务类调用外部 REST API。

我使用 RestTemplate 来调用外部 REST api。
我的问题是:
为什么我必须创建一个 bean

    //resttemplate so that we can autowire it inside services
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
// Do any additional configuration here
return builder.build();
}

然后为我服务

    @Autowired
private RestTemplate restTemplate = new RestTemplate();

我还可以将它与 Autowiring 一起使用,然后我就不必创建 bean...

如果不创建 bean @autowired 对我来说失败了。

最佳答案

如果您不愿意,则不必将 RestTemplate 创建为 bean。您的应用程序将进行的每个类似的远程 Http 调用都应该有一个 RestTemplate。

例如,如果您的应用程序正在对 Facebook API 进行远程 Http 调用,并且您希望对响应制定特定的缓存策略,则可以使用自定义 ClientHttpRequestFactory 创建 RestTemplate。如果您的应用程序还必须调用 GitHub API,而您需要不同的缓存策略或身份验证方法,那么您可能有另一个带有自己的 ClientHttpRequestFactory 的 RestTemplate。

但是,如果您的应用程序只有标准远程 Http 调用,无需自定义它们,您可以为整个应用程序创建一个 RestTemplate 并将其公开为 bean (就像您所做的那样)。如果您不想这样做,并且希望每个服务都有自己的 RestTemplate,只需删除 bean 声明并从服务中删除 @Autowired 即可。然后该服务将有自己的 RestTemplate。

注意:您还可以使用 RestTemplate restTemplate = new RestTemplateBuilder().build(); 对 RestTemplate 进行更多自定义。

关于java - 在 Spring Boot 中定义 beans 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58452238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com