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

标签 java spring spring-boot

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

相关文章:

java - 我可以在 ZKGrails 编辑器中使用 Spring Security 注释吗?

java - Spring MVC 转换 Spring Rest Api

java - 在 RHEL 6 上安装 R R-java-devel 需要 java-devel

java - G1GC GC logs 是什么意思?

java - Hibernate 4 延迟加载不起作用

java - 将架构名称添加到 Spring 数据中的实体?

java - 如何自行部署 Spring Boot 应用程序

SQL 语句中的 Spring Boot Hibernate 语法错误

Java,HttpUrlConnection。 getResponseCode() 的问题

java - JSP 中的 "value"实际上意味着什么?