gpt4 book ai didi

java - 上下文表单循环中的多个 RestTemplate 构建器

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

我的应用程序对 2 个不同的 Web 服务进行 REST 调用。第一个使用基本身份验证,第二个则不使用。我想定义一个配置了基本身份验证凭据的 RestTemplateBuilder bean,并将其用于基本身份验证情况,并使用默认的 Spring 配置的 RestTemplateBuilder 用于非基本身份验证情况。

但是定义自定义 RestTemplateBuilder bean 会导致上下文加载失败(详细信息如下)。

Bean 定义:

@Configuration
class RestTemplateBuilderConfig {

@Bean
public RestTemplateBuilder customRestTemplateBuilder(RestTemplateBuilder springConfiguredRestTemplateBuilder) {
return
springConfiguredRestTemplateBuilder
.basicAuthentication("user", "password");
}
}

@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}

上下文加载失败:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

┌─────┐
| customRestTemplateBuilder defined in class path resource [com/example/demo/RestTemplateBuilderConfig.class]
└─────┘

据我了解,spring 初始化的 bean 应该注入(inject)到 customRestTemplateBuilder(...) 中,并且返回值应该生成一个名为 customRestTemplateBuilder 的新 bean。感谢任何有关可能出现问题的指示?

this question 的答案建议定义 RestTemplate beans。但这会阻止在我的测试中使用 RestClientTest

我可以将 Spring 初始化的 RestTemplateBuilder 注入(inject)到我的服务中,并在每个服务中的 restTemplateBuilder.build() 之前设置凭据。但随后设置凭据的逻辑将分布在服务之间(违反 DRY)。

定义一个新的 RestTemplateBuilder 可以解决该问题,但 Spring 初始化会丢失。

@Bean
public RestTemplateBuilder customRestTemplateBuilder() {
return
new RestTemplateBuilder()
.basicAuthentication("user", "password");
}

最佳答案

你别无选择,只能在你的上下文中定义 2 个 bean,通过为两者定义一个 init 方法,它们可能共享相同的初始化逻辑。正如您的示例所示,bean 级别的重用是不可能的。

关于java - 上下文表单循环中的多个 RestTemplate 构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56434353/

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