Spring @Qualifier,@Primary
[Q&A] @Qualifier 引入背景
在使用 @Inject 或 @Autowired 进行依赖注入时,默认是 按类型匹配 Bean 的,但如果容器中有多个相同类型的 Bean,Spring 就无法确定该注入哪一个,会抛出异常:NoUniqueBeanDefinitionException
这就需要一个机制来 明确指定注入哪一个 Bean。
[Q&A] @Primary引入背景?
在使用 @Autowired 或 @Inject 进行自动装配时,默认是按 类型匹配 Bean,但如果存在多个Bean,Spring 就无法确定该注入哪一个,会抛出异常:NoUniqueBeanDefinitionException
。此时,开发者需要一种方式告诉 Spring:“如果有多个匹配项,请优先使用这个 Bean。”这就是 @Primary 引入的核心目的。
[Q&A] @Qualifier 和 @Primary 对比?
特性 | @Qualifier | @Primary |
---|---|---|
引入年份 | 2007 年(随 Spring 2.5 引入) | 2007 年(随 Spring 2.5 引入) |
作用 | 明确指定注入哪一个 Bean(通过名称或语义标签) | 标记某个 Bean 为首选 Bean(默认注入项) |
@Service
public class OrderService {@Autowiredprivate PaymentService paymentService; // 会注入被 @Primary 标记的 Bean@Autowired@Qualifier("alipayService")private PaymentService alipay; // 明确注入特定 Bean
}
典型用法
Spring @Qualifier 典型用法
Spring @Primary 典型用法