spring - 在@Bean 定义中使用@Qualifier 的用例是什么?
问题描述
我知道@Qualifier 和@Bean 注释的含义,但是在这样的代码中使用它有什么意义呢?这是为了覆盖“loadBalancedRestTemplate”bean 还是什么?
@Bean
@Qualifier("loadBalancedRestTemplate")
public RestTemplate restTemplate(RestTemplateCustomizer customizer) {
RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
customizer.customize(restTemplate);
return restTemplate;
}
解决方案
您可以使用:
@Bean(name="loadBalancedRestTemplate")
public RestTemplate restTemplate(RestTemplateCustomizer customizer)...
或者您可以互换发布的那个。
默认情况下,使用@Autowired
spring 时会找到匹配类型的 bean 并注入该 bean。问题是,如果您有多个相同类型的 bean,它将不知道要注入哪一个。根据您的代码,您可以在其中指定@Qualifier
配置中的 bean 名称。在@Autowired
目标中,您将指定相同@Qualifier
的内容来告诉 Spring 要使用哪个 bean。
一个常见的用例RestTemplate
是需要在多个由于某种原因工作方式不同的休息端点上进行调用。在这种情况下,例如根据您尝试调用的端点使用具有不同参数的setErrorHandler
or方法或在代码中使用 as 是很常见的。setMessageConverters
RestTemplateCustomizer
在您的特定情况下,应用的自定义loadBalancedRestTemplate
取决于提供的RestTemplateCustomizer
. 根据该对象的创建方式,您的特定代码可能会或可能不会被修改为简单地返回RestTemplate
.
就目前而言,假设一切都是出于正当理由完成的,我只能推测:
- 不同
@Service
的类会使用不同的RestTemplate
实例来调用不同的服务 - 您的代码库中有另一个
@Bean
定义RestTemplateCustomizer
- 其他
RestTemplate
实例不会使用它RestTemplateCustomizer
,因此使它们与您提供的代码中的不同
推荐阅读
- python - 如何在 Facebook Prophet (Python) 中检索训练有素的超参数?
- bluetooth-lowenergy - Bluez Mesh:发送:获取 key_index
- seo - 关于博客hreflang的问题
- python - 将具有特定名称的文件复制到另一个文件夹
- windows-10 - windows 10 自定义标题栏颜色
- node.js - 从 Node 云功能向特定的 Flutter 应用用户发送云消息
- azure-storage-queues - 如何检查存储队列是否包含特定消息
- mysql - 这个 Doctrine 查询 SQL 注入证明吗?
- python - AttributeError:“ParsedRequirement”对象在 PIP 21.1.1 中没有属性“req”
- delphi - 当焦点控件干扰时如何捕获 KeyDown?