如果预选赛可以完成这项工作,那么初级需要什么?

问题描述 投票:0回答:1

我知道使用 @Primary 会给出默认选择。但是总是使用 @Qualifier 指定您的偏好有什么坏处呢? 如果两者都使用,则优先级将转到@Qualifier。 如果没有任何问题那么为什么还需要@Primary?

假设我有一段代码可以说:

@Component
@Primary
public class FooFormatter implements Formatter {
    //...
}

@Component
public class BarFormatter implements Formatter {
    //...
}

如果我想注入任何上述两个,我总是可以做到:

@Qualifier("FooFormatter")
@Autowired
private Formatter formatter;

//OR

@Qualifier("BarFormatter")
@Autowired
private Formatter formatter;
spring-boot dependency-injection backend autowired
1个回答
0
投票

@Primary
允许您覆盖默认情况下存在的 bean。 这可以用来用更具体的东西覆盖默认/后备实现。

示例用例:有一个默认(甚至可能无操作)实现,以及一个由配置属性激活的特殊实现(带有

@ConditionalOnProperty
)。

使用

@Qualifier
,您正在处理 Bean 的“已知变体”,并选择一个合适的变体。示例:不同配置的 RestTemplate beans,一个用于连接到的每个系统。
    

© www.soinside.com 2019 - 2024. All rights reserved.