//定义亚洲人
@Qualifier("Asian")
@Component
public class AsianMan extends Person {}········//定义欧洲人
@Qualifier("Europe")
@Component
public class EuropeMan extends Person {}

注入bean时,可以使用@Autowired自动注入

public class Controller {@Qualifier("Asian")      //指定注入的是Asain的bean@Autowiredprivate Person person;}

也可以使用xml配置

<bean id="controller" class="org.leisu.Controller"><qualifier type="org.springframework.beans.factory.annotation.Qualifier" value="Asian"/>
</bean>

可以看到,在生成两个继承了Person的bean时,通过@Qualifier()注解指定了两个bean的特征,分别为:“Asian“、”Europe“;在注入bean时,静态类型是父类Person,通过@Qualifier()指定注入的bean为”Asian“

2.  bean已有id,为什么还用@Qualifier?

      上面的例子,我们可以把两个bean的id分别设为“Asian“、”Europe“,然后用@Resource(name="***")也同样能实现相关功能,那为什么还要用@Qualifier?

个人理解@Qualifier是个修饰词,不需要bean_id不可重复那么严格,比较灵活。那么就可以把其中的参数作为一种修饰,作为bean的形容词来进行更细致的描述。在《Spring实战》书中,举例是类IceCream(冰淇淋)和Dessert(甜点)都用@Qualifier(”cold“)来修饰,意思是凉的冰淇淋和甜点。

因此使用@Qualifier,更加灵活,也更符合面向对象的思想。

2.  @Qualifier加在注解上

上面的例子中,可以看到是使用@Qualifier()中value的参数来筛选bean的,本文给此参数起个名字,叫做修饰语。修饰语是字符串类型,可以设置各种值。

如果一个工程的修饰语种类特别多,或者修饰语语义之间有继承等类似复杂关系,或者需要用多个修饰语修饰同一个bean,那用这种直接的方式就不太好操作了。修饰语value字符串容易拼错,容易混淆,更不容易被编辑器检测出来,调试bug困难。

因此可以自定义一个新的注解,使用@Qualifier修饰,制作自己的修饰语注解

  1. @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})

  2. @Retention(RetentionPolicy.RUNTIME)

  3. @Qualifier("Asian") //使用@Qualifier自定义修饰注解Asian

  4. public @interface Asian{ ... }

  5. ···············

  6. //定义亚洲人

  7. @Asian //使用我们自定义的修饰注解

  8. @Component

  9. public class AsianMan extends Person {

  10. }

注入

  1. public class Controller {

  2. @Asian //指定注入的是Asain的bean

  3. @Autowired

  4. private Person person;

  5. }

23 SpringBoot @Qualifier注解相关推荐

  1. SpringBoot的注解@Qualifier用法

    在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢? 根据注入资源的注解不同实现的方式有一点小小的区别 下面上铺垫图 请忽略我的红线 ##在C ...

  2. ssm与springboot常见注解

    MyBatis中常见的注解 @Insert:设置添加数据的SQL语句注解,标注在数据访问层的方法上 @Insert("insert into student_tab values(null, ...

  3. Spring学习(10)--- @Qualifier注解

    按类型自动装配可能多个bean实例的情况,可以使用Spring的@Qualifier注解缩小范围(或指定唯一),也可以指定单独的构造器参数或方法参数 可用于注解集合类型变量 例子: package c ...

  4. 【日常】SpringBoot缓存注解器及整合redis实现(附近期一些python零碎的内容)

    序言 似乎灵感枯竭了,完全不知道该写些什么东西,非常的痛苦,决定走读博这条路之后就失去了很多乐趣,总是想应该积累更多的论文和相关项目代码量,但是效率却总是很低,需要应付课程与考试,一篇paper的阅读 ...

  5. SpringBoot常用注解

    1.@SpringBootApplication 包含@Configuration.@EnableAutoConfiguration.@ComponentScan通常用在主类上: 2.@Compone ...

  6. 40 个 SpringBoot 常用注解

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:https://ramostear.com/ 一.Spring Web MVC 与 Spring Bean 注解 Spri ...

  7. 在方法的形参位置使用@Qualifier注解||@Autowired 与@Resource的区别

    实验21:在方法的形参位置使用@Qualifier注解 实验22:@Autowired注解的required属性指定某个属性允许不被设置 @Autowired   @Resource  @Inject ...

  8. @retention注解作用_分分钟带你玩转SpringBoot自定义注解

    在工作中,我们有时候需要将一些公共的功能封装,比如操作日志的存储,防重复提交等等.这些功能有些接口会用到,为了便于其他接口和方法的使用,做成自定义注解,侵入性更低一点.别人用的话直接注解就好.下面就来 ...

  9. 请举例说明@Qualifier 注解?

    @Qualifier 注解意味着可以在被标注bean 的字段上可以自动装配.Qualifier 注解可以用来取消Spring不能取消的bean 应用.

最新文章

  1. python恶搞-如何用python和vbs恶搞基友?
  2. 手机控件查看工具uiautomatorviewer
  3. linux apt-get 源,Ubuntu应用之——apt-get更改源地址
  4. 7、Flask实战第7天:Jinjia2模板
  5. laravel静态资源
  6. [机器学习]XGBoost 和 LightGBM 参数对比与调参
  7. [Xcode 实际操作]五、使用表格-(11)调整UITableView的单元格顺序
  8. 关于JVM方法调用的那些事
  9. boost 学习笔记
  10. 对adapter的封装优化
  11. 【HDOJ6955】Xor sum(异或前缀和,01字典树)
  12. 力扣题目系列:204. 计数质数
  13. vue中的混入mix
  14. NTC热敏电阻的时间常数
  15. 蜀门Online 简单打怪脚本(vbs)
  16. docker-compose 部署mysql一直重启
  17. C#winform中OpenFileDialog的用法
  18. 分页查询时报错:The bean ‘localeResolver‘, defined in class path resource [com/botany/spore/core/config/Comm
  19. DevOps入门系列--前瞻性--前瞻性思维
  20. 射频器件厂商RFMD与TriQuint达成合并协议

热门文章

  1. 动态规划及动态规划的应用
  2. Python人工智能基础到实战课程-北方网视频
  3. c++ STL容器 --- 栈stack
  4. 造成503 service unavailable常见的原因以及解决方法
  5. IDS--入侵检测系统的学习
  6. 为什么说 NLP 将是未来数据领域的珠峰?
  7. canvas scale()画布缩放的使用
  8. 初识 CGI,CGI 简识
  9. 台式机是计算机进入睡眠状态,电脑如何进入睡眠状态_电脑如何设置自动睡眠...
  10. C++ constants