1、标示首选的bean

组件扫描方式例子:

@Component
@Primary
public class IceCream implements Dessert {...}

Java配置例子:

@Bean
@Primary
public Dessert iceCream(){return new IceCream();
}

XML配置例子:

<bean id="iceCream" class="com.dessertteater.IceCream" primary="true" />

2、限定自动装配的bean

2.1、创建自定义限定符

例子:

@Autowired
@Qualifier("iceCream")
public void setDessert(Dessert dessert){this.dessert = dessert;
}

默认情况下,组件扫描创建的bean的id为类名第一个字母变为小写,在不自定义限定符的情况下,限定符默认与id相同,因此在默认情况下限定符与类名是紧耦合的,这样并不利于重构。

创建自定义限定符例子:

@Component
@Qualifier("cold")
public class IceCream implements Dessert {...}
@Bean
@Qualifier("cold")
public Dessert iceCream(){return new IceCream();
}

注意:Java8允许一个条目上出现重复的注解,但是这个注解本身在定义的时候要带有@Repeatable注解,不过,Spring的@Qualifier注解并没有在定义时添加这个注解。

2.2、创建自定义限定符注解

例子:

@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface Cold{}
@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface Creamy{}
@Component
@Cold
@Creamy
public class IceCream implements Dessert {...}
@Component
@Cold
@Fruity
public class Popsicle implements Dessert {...}
@Autowired
@Cold
@Creamy
public void setDessert(Dessert dessert){this.dessert = dessert;
}

结合之前重构后的@Profile的定义,我们可以通过已有注解以及组合创建功能更加强大和灵活的自定义注解。

Spring实战(第四版)读书笔记08——处理自动装配的歧义性相关推荐

  1. Spring 实战 第4版 读书笔记

    第一部分:Spring的核心 1.第一章:Spring之旅 1.1.简化Java开发 创建Spring的主要目的是用来替代更加重量级的企业级Java技术,尤其是EJB.相对EJB来说,Spring提供 ...

  2. 《spring实战第四版》的读书笔记

    <spring实战第四版>的读书笔记 1 概述 <Spring实战第四版>描述了Spring4架构的设计,看完了以后,最大感觉是Spring的IOC与aop理念实在是太强大了, ...

  3. Think in Java第四版 读书笔记10 第16章 数组

    Think in Java第四版 读书笔记10 第16章 数组 数组和容器很像 但他们有一些差别 16.1 数组为什么特殊 数组与容器的区别主要在效率和存储类型 效率:数组是简单的线性序列 使得数组的 ...

  4. Think in Java第四版 读书笔记9第15章 泛型

    Think in Java第四版 读书笔记9第15章 泛型 泛型:适用于很多很多的类型 与其他语言相比 Java的泛型可能有许多局限 但是它还是有很多优点的. 本章介绍java泛型的局限和优势以及ja ...

  5. Spring实战(第四版)

    Spring实战(第四版) 链接:https://pan.baidu.com/s/1PhnJqOsQPz5hqe-zxkqPOg 提取码:eu15 复制这段内容后打开百度网盘手机App,操作更方便哦

  6. 《Spring实战》第四版读书笔记 第二章 装配Bean

    2019独角兽企业重金招聘Python工程师标准>>> 在Spring中,对象无需自己查找或创建与其所关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象. 创建应用对 ...

  7. Java编程思想 第四版 读书笔记巩固基础,完善知识框架。

    Java编程思想读书笔记 此笔记仅仅是作者的阅读此书时,发现自己错误认识和不牢固的知识,用来完善作者的知识框架,其列出重点不具有参考性,代码也是为了省工作量,简写代码,能看懂即可,语法并不规范 第一章 ...

  8. Spring实战(六)自动装配的歧义性

    1.Spring进行自动装配时碰到的bean歧义性问题. 在进行自动装配时,只有仅有一个bean匹配所需结果时,才是可行的. 如果不仅仅一个bean能够匹配结果,例如一个接口有多个实现,这种歧义性会阻 ...

  9. Think in Java第四版 读书笔记7第13章 字符串

    本章内容 1.string的基本使用 2.string拼接符 + 3.Object方法toString 4.String的常用方法 5.String的格式化输出 6.正则表达式 13.1 不可变字符串 ...

最新文章

  1. scikit-learn朴素贝叶斯各种用法总结真正讲明白的,为作者建平点赞
  2. jquery-validate remote验证,返回不同的消息内容
  3. python互斥锁_Python多线程如何使用互斥锁
  4. U盘加载速度慢的解决方法
  5. window系统无限试用 JAVA IDEA不限版本
  6. 奇妙的数学动图,美到令人窒息!
  7. (搬家文) c++引用深入探讨
  8. 企业级Docker Registry开源工具Harbor的用户使用指南
  9. cov(m[, y, rowvar, bias, ddof, fweights, …])
  10. BIM工程信息管理系统搭建-系统功能需求
  11. 浏览Android系统源码的站点
  12. messagedigest 图片加密_MessageDigest来实现数据加密
  13. 如何阅读Java源码?已收藏以备后用
  14. 什么是DNS域名解析
  15. PayPal支付(Java开发)完整版
  16. JAVA (Graphics2D)解决合成图片失真问题
  17. 【博弈论】Nim游戏/Nim博弈及其异或的详细易懂理解
  18. 网络编程:使用tcp协议实现服务器与客户端交互
  19. disable属性导致后台接收值为null解决方法
  20. 基于java派大星水产商城mp4计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

热门文章

  1. Postgre 实现 插入更新
  2. 头脑风暴:当我分析了我的经历后
  3. Python灰度共生矩阵OpenCV和scikit-image图像特征分析和K-最近邻算法
  4. ardl模型stata命令_Stata新命令快讯: 有向无环图、模糊倍分法等
  5. BootStrap中修改navbar导航条的默认高度
  6. 《考研数据结构》复习讲义 全网最全~
  7. MPU6500的使用之代码展示
  8. DDD(领域驱动设计)系列主题:领域驱动设计(DDD)实践
  9. mysql病历管理_医院肛肠科病历管理及诊断系统设计与实现(SSI,MySQL)
  10. 计算机语言表示教师节快乐,教师节英文祝福语(精选50句)