Spring中几个注解@Autowired、@Resource、@Qualifier用法

概述

这几个都是实现注入Bean,使用 @Autowired 注解是 Spring 依赖注入的绝好方法,但是当实现类很多就不知道注入哪个了。

  • @Autowired 按类型装配 Spring Bean
  • @Resource 按名称即为@Autowired+@Qualifier

多个实现类

如果直接使用@Autowired,则抛出NoUniqueBeanDefinitionException,搭配@Qualifier完成使用。

public interface MultiService {

    /**
     * 多实现类型
     *
     * @param name 名称
     */
    void sayHello(String name);
}

实现类1

@Service("one")
public class MultiServiceOneImpl implements MultiService {
    /**
     * 多实现类型
     *
     * @param name 名称
     */
    @Override
    public void sayHello(String name) {
        System.out.println("name=" + name + ",i am one,hello!");
    }
}

实现类2

@Service("two")
public class MultiServiceTwoImpl implements MultiService {
    /**
     * 多实现类型
     *
     * @param name 名称
     */
    @Override
    public void sayHello(String name) {
        System.out.println("name=" + name + ",i am two,hello!");
    }
}

如果直接使用@Autowired

@RunWith(SpringRunner.class)
@SpringBootTest(classes = BootApp.class)
public class TestServiceApp {

    @Autowired
    //@Qualifier("one")
    //@Resource(name = "one")
    MultiService multiService;

    @Test
    public void test() {
        multiService.sayHello("小明");
    }
}

在这里插入图片描述

@Qualifier 和 @Primary

还有另一个名为 @Primary 的注解,我们也可以用来发生依赖注入的歧义时决定要注入哪个 bean。当存在多个相同类型的 bean 时,此注解定义了首选项。除非另有说明,否则将使用与 @Primary 注释关联的 bean 。

@Service
@Primary
public class MultiServiceOneImpl implements MultiService {}

使用

    @Autowired
    //@Qualifier("one")
    //@Resource(name = "one")
    MultiService multiService;

@Resource

@Resource有两个重要属性,分别是name和type

此外查看源码,可以从CommonAnnotationBeanPostProcessor开始,Spring容器在每个Bean实例化之后,调用后置处理器CommonAnnotationBeanPostProcessorpostProcessMergedBeanDefinition方法,查找该Bean是否有@Resource注解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值