Indicates that a bean should be given preference when multiple candidates are qualified to autowire a single-valued dependency. If exactly one 'primary' bean exists among the candidates, it will be the autowired value. @interface Primary的作用是什么?
@Primary 注解在 Spring Framework 中扮演着 “主要候选者” 的角色,它的核心作用是解决当一个接口或类型有多个实现类(即多个候选 Bean)时,Spring 自动装配(Autowiring)过程中可能出现的歧义问题。
具体作用:
- 标识首选 Bean: 当 Spring 容器需要自动装配一个单值依赖项(例如,一个字段、一个 setter 方法参数或一个构造函数参数),并且该依赖项的类型在容器中存在多个匹配的 Bean 定义时,
@Primary注解会告诉 Spring:“如果存在一个被标记为@Primary的 Bean,请优先选择它”。 - 解决歧义: 这是 Spring 解决自动装配歧义性(
NoUniqueBeanDefinitionException)的主要机制之一。它提供了一种声明式的、非侵入性的方式来指定默认的 Bean。 - 简化配置: 在大多数情况下,我们希望某个特定的 Bean 实现作为默认选择。使用 
@Primary可以避免在每个注入点都使用@Qualifier来指定具体的 Bean 名称。 
关键规则:
- 唯一性: 在自动装配一个依赖项时,最多只能有一个 候选 Bean 被标记为 
@Primary。如果存在多个标记了@Primary的候选 Bean,Spring 仍然会抛出NoUniqueBeanDefinitionException,因为它无法确定哪个才是真正的“首选”。 - 优先级高于非主 Bean: 如果存在一个 
@PrimaryBean 和多个非主 Bean,Spring 会选择那个@PrimaryBean。 - 与 
@Qualifier的关系:@Qualifier注解的优先级高于@Primary。如果在注入点同时使用了@Qualifier指定了具体的 Bean 名称,Spring 会优先遵循@Qualifier的指示,而忽略@Primary。@Primary提供的是默认行为,而@Qualifier提供的是精确指定。 
使用场景示例:
假设你有一个 DataSource 接口,并且有两个实现:EmbeddedDataSource(用于开发/测试)和 ProductionDataSource(用于生产)。在大多数服务中,你希望默认注入 ProductionDataSource,但在某些特定的测试配置中,你需要注入 EmbeddedDataSource。
JAVA
@Configuration
public class DataSourceConfig {
    @Bean
    @Primary // 标记这个为默认的 DataSource
    public DataSource productionDataSource() {
        return new ProductionDataSource();
    }
    @Bean
    public DataSource embeddedDataSource() {
        return new EmbeddedDataSource();
    }
}
@Service
public class MyService {
    @Autowired
    private DataSource dataSource; // 这里会自动注入 productionDataSource,因为它被标记为 @Primary
    // ...
}
@Service
public class TestService {
    @Autowired
    @Qualifier("embeddedDataSource") // 这里明确指定要注入 embeddedDataSource,覆盖了 @Primary
    private DataSource testDataSource;
    // ...
}
总结:
@Primary 注解的作用是在存在多个类型兼容的 Bean 候选者时,标记其中一个作为自动装配的默认首选 Bean。它提供了一种简洁的方式来消除自动装配的歧义,避免了在每个注入点都使用 @Qualifier,使得配置更加清晰和易于管理。它是 Spring 依赖注入机制中处理多候选 Bean 情况的重要工具之一。