[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 典型用法