持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情
这篇文章我们来介绍一些@Qualifier 注解的作用。
Qualifier 注解
qualifier 单词的意思是:限定词、限定语、修饰语。
在之前的文章中我们介绍过@Autowire 注解,在文章我们提到,@Autowire 是按照类型进行匹配的,如果当前@Autowire 标注的依赖对象在容器中只有一个实例与之对应,那肯定是没什么问题的。
但是如果通过类型匹配能找到多个对象实例,在类型相同的情况下,按照目前已经讲过的方式来看,这是还没有考虑到的一个问题。
对于我们开发者来说,我们自然知道应该把哪个实例注入给需要依赖其他对象的对象中去。但是对于IOC 容器来说,它却没有我们开发者的思想。因为Spring 对于开发者来说,就是一个工具。虽然它没有人类的思想,但是我们却可以通过各种方式对其进行控制,以便完成我们需要完成的工作。
所以说,我们需要找一种方式来告诉IOC 容器,应该为当前依赖注入哪个实例对象,这个时候就可以使用@Qualifier 注解对依赖注入的条件做进一步的限定。
我们知道,对于对象的限定有两种方式,一个是byType,一个是byName。
@Qualifier 实际上是byName 自动绑定的注解版本。
@Autowire 是byType,但是在IOC 容器中如果有多个相同类型的对象,容器并不知道使用哪个对象实例,这时,我们就使用@Qualifier 注解来直接点名使用需要的那个就好了。
@Qualifier 一般的使用语法举例如下:
@Qualifier("abcService")
总结
这篇文章我们引入了@Qualifier 注解,介绍了@Qualifier 注解的作用。对比与@Autowire 注解,我们知道两者功能相近,只不过一个是byType 方式(@Autowire)进行依赖注入,一个是byName 方式(@Qualifier)进行注入。