我在我们的代码库中看到,我们直接在构造函数中注入依赖项,而不是使用
@Autowired
。我的问题是——当有多个实现时,Spring 如何确定要注入哪个依赖项?这是一些示例代码:
public class UserDetailsService {
private final RestTemplate restTemplate;
public UserDetailsService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
假设有 2 个不同的自定义
RestTemplate
配置注释类返回它的 2 个不同变体。 Spring 是否偏爱其中一种实现,还是随机选择一种实现并采用它?我知道我们可以使用 @Autowired
和 @Qualifier
来选择我们的偏好,但是 Spring 的默认偏好是什么或者是否有任何偏好?
如果有多个bean符合注入依赖项的条件,那么Spring将出现错误。它不会自己选择一个。有多种定义标准的方法,例如使用特定类型而不是通用类型或使用
@Qualifier
或 @Primary
等。但如果无法根据所有可用标准计算出偏好,则这是损坏的配置,必须修复。