Spring注解之@Qualifier和@Primary

前言

之前有用到过@qualifier不过都是直接拿来用了,没有研究他到底是干嘛的,今天又遇到了就研究一下他究竟是干嘛的,跟他相关的注解还有哪些。

@Qualifier

这个注解一般是跟@Autowired搭配使用的,@Autowired这个注解是用来标识需要注入的bean,默认情况下,@Autowired 按类型装配 Spring Bean
但是如果有两个同名的bean该怎么办,仅使用这个注解不能正确定位该注入哪个bean,这个时候就需要一个辅助来配合一下,就是@Qualifier注解。
简单来说这个注解就是告诉spring我想注入哪个bean。
举个例子说明一下

定义一个基础接口DemoBase

public interface DemoBase {
    String test();
}

写一个实现类 Demo_A

@Component
public class Demo_A implements DemoBase{
    public String test(){
        return "testA";
    }
}

再写一个实现类 Demo_B

@Component
public class Demo_B implements DemoBase{
    public String test(){
        return "testB";
    }
}

最后写一个主方法 DemoMainAB

public class DemoMainAB {
    @Autowired
    private DemoBase demoBase;
    
    //此处省略一万次
}

如果尝试将DemoMainAB 加载到上下文中,Spring 框架将抛出 NoUniqueBeanDefinitionException

这是因为Spring 不知道要注入哪个 bean,所以需要用@Qualifier打个辅助,用来指定需要注入哪个bean
改造后的DemoMainAB

public class DemoMainAB {
    @Autowired
    @Qualifier("demoA")
    private DemoBase demoBase;

    //此处省略一万次
}

@Primary注解

先看个例子,以下代码也可以实现上面改造后的效果

@Component
@Primary
public class Demo_A implements DemoBase{
    public String test(){
        return "testA";
    }
}

Demo_A中添加该注解作用是告诉spring容器我这个接口默认使用这个bean作为实现类依赖注入。
值得注意的是,如果 @Qualifier@Primary 注释同时存在,那么 @Qualifier 注释的优先级更高。@Primary 是定义了默认值,而 @Qualifier 则是非常具体的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值