java - 上下文表单循环中的多个 RestTemplateBuilders
问题描述
我的应用程序对 2 个不同的 Web 服务进行 REST 调用。第一个使用基本身份验证,第二个不使用。我想定义一个配置了基本身份验证凭据的 RestTemplateBuilder bean,并将其用于基本身份验证情况,并将默认 Spring 配置的 RestTemplateBuilder 用于非基本身份验证情况。
但是定义自定义 RestTemplateBuilder 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 注入customRestTemplateBuilder(...)
,并且返回值应该产生一个名为 name 的新 bean customRestTemplateBuilder
。感谢有关可能出现问题的任何指示?
这个问题的答案建议定义 RestTemplate bean。但这会阻止RestClientTest
在我的测试中使用。
我可以将 Spring 初始化的 RestTemplateBuilder 注入到我的服务中,并restTemplateBuilder.build()
在每个服务之前设置凭据。但是随后设置凭据的逻辑将分布在服务中(违反 DRY)。
定义一个新的 RestTemplateBuilder 解决了这个问题,但是 Spring 初始化丢失了。
@Bean
public RestTemplateBuilder customRestTemplateBuilder() {
return
new RestTemplateBuilder()
.basicAuthentication("user", "password");
}
解决方案
您别无选择,只能在您的上下文中定义 2 个 bean,它们可能通过为两者定义一个 init 方法来共享相同的初始化逻辑。正如您的示例中所示,由于 bean 级别的重用是不可能的。
推荐阅读
- arrays - 从 scikit.rf 网络中减去常量
- javascript - 在 WebView 中添加限制以阻止在 WebView 中打开其他链接
- qt - 仅在 QML 中创建 TreeView
- c# - 索引视图未将参数 Id 传递给 mvc 控制器
- python - 通过 Python 扫描指令从打印机获取 PDF 文件
- javascript - Vue中的发射不会发射
- asp.net-mvc - IIS 中的重定向 404 服务器错误
- c# - 异步 IO API 调用后异步方法中多个并发线程的继续
- ios - 在 Testflight 中没有可供内部用户使用的构建
- python - Django:将评论/评论表单添加到 get_context_data