Spring学习笔记_17——@Primary

@Primary

1. 介绍

@Primary 注解是Spring框架提供的一个注解,用于在存在多个相同类型的bean时指定首选或主要的bean。当Spring容器需要自动注入某个类型且有多个候选者时,它会优先选择带有@Primary注解的bean。

2. 场景

如果依赖的对象存在多个类型相同的Bean时,使用@Autowired注解已经无法正确完成Bean的装配工作。此时,可以使用@Qualifier注解明确指定要装配的Bean对象。也可以使用@Primary注解优先装配对应的Bean对象。

3. 源码

 /*
 * @author Chris Beams
 * @author Juergen Hoeller
 * @since 3.0
 * @see Lazy
 * @see Bean
 * @see ComponentScan
 * @see org.springframework.stereotype.Component
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Primary {
}

4. Demo

  • 创建DAO层接口
public interface DemoDAO {
}
  • 创建接口的第一个实现类
public class DemoDAOImpl1 implements DemoDAO {
}
  • 创建接口的第二个实现类
public class DemoDAOImpl2 implements DemoDAO {
}
  • 在配置类中指定DemoDAO实现的优先级
@Configuration
public class DemoConfig {
    @Bean
    @Primary
    public DemoDAO primaryDemo1() {
        return new DemoDAOImpl1();
    }

    @Bean
   public DemoDAO primaryDemo2() {
        return new DemoDAOImpl2();
   }

}
  • 在Service层使用下
@Service
public class DemoService {
    @Autowired
    private DemoDAO demoDAO;

    @Autowired
    @Qualifier("primaryDemo2")
    private DemoDAO demoDAO2;

    @Override
    public String toString() {
        return "DemoService{" +
                "demoDao=" + demoDao + "demoDao2=" + demoDao +
                '}';
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值