我对 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/