1、Spring进行自动装配时碰到的bean歧义性问题。

  在进行自动装配时,只有仅有一个bean匹配所需结果时,才是可行的。

  如果不仅仅一个bean能够匹配结果,例如一个接口有多个实现,这种歧义性会阻碍Spring自动装配属性、构造器参数或者方法参数。

  (虽然在实际中,这种歧义性问题很罕见,通常所需的接口只有一个实现类。)

  2、Spring提供的解决方案

    A. 将可选bean中的某一个设为首选(primary)的bean;

    B. 使用限定符,使得Spring可选的bean减少为一个(only one)。

  3、solution A---使用@Primary

  Spring注解:

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

  JavaConfig:

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

  XML中:

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

  4、solution B---限定符@Qualifier("要注入的bean的ID")

//最简单的用法
@AutoWired
@Qualifier("iceCream")
public void setDessert(Dessert dessert){
this.dessert=dessert;
}

  5、创建自定义的限定符(略了…知道有这个功能就行)

Spring实战(六)自动装配的歧义性的更多相关文章

  1. Spring实战之处理自动装配的歧义性

    仅有一个bean匹配所需的结果时,自动装配才是有效的.如果不仅有一个bean能够匹配结果的话,这种歧义性会阻碍Spring自动装配属性.构造器参数或方法参数.为了阐述自动装配的歧义性,假设我们使用@A ...

  2. Spring入门(八):自动装配的歧义性

    1. 什么是自动装配的歧义性? 在Spring中,装配bean有以下3种方式: 自动装配 Java配置 xml配置 在这3种方式中,自动装配为我们带来了很大的便利,大大的降低了我们需要手动装配bean ...

  3. spring装配---处理自动装配的歧义性

    一.歧义性 当我们使用spring的注解进行自动装配bean时,如果不仅有一个bean能够匹配结果的话,会抛出NoUniqueBeanDefinitionException: 例如本例中 当sprin ...

  4. spring学习总结——高级装配学习二(处理自动装配的歧义性)

    我们已经看到如何使用自动装配让Spring完全负责将bean引用注入到构造参数和属性中.自动装配能够提供很大的帮助.不过,spring容器中仅有一个bean匹配所需的结果时,自动装配才是有效的.如果不 ...

  5. Spring-处理自动装配的歧义性

    自动装配可以对依赖注入提供很大帮助,因为它会减少装配应用程序组件时所需的显式装配的数量. 不过,仅有一个bean匹配所需的结果时,自动装配才是有效的.如果不仅有一个bean能够匹配的话,这种歧义性会阻 ...

  6. SpringInAction--Bean自动装配的歧义性处理

    在前面,学习如何装配Bean的时候,或许会发现,有的同类型的Bean智能配置一个 如下: package com.bean.java; import org.springframework.conte ...

  7. Spring处理自动装配的歧义性

    1.标识首选的bean 2.使用限定符@Qualifier 首先在bean的声明上添加@Qualifier 注解: @Component @Qualifier("cdtest") ...

  8. Spring实战3:装配bean的进阶知识

    主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...

  9. Spring 由构造函数自动装配

    Spring 由构造函数自动装配,这种模式与 byType 非常相似,但它应用于构造器参数. Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 ...

随机推荐

  1. ARTS打卡计划第十三周

    Algorithms: https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/ 最长连续子序列. Rev ...

  2. ora-01578

    SQL> exec DBMS_STATS.GATHER_DATABASE_STATS; BEGIN DBMS_STATS.GATHER_DATABASE_STATS; END; * ERROR ...

  3. Android跨进程通信广播(Broadcast)

    广播是一种被动跨进程通讯的方式.当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据.这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通,在应用程序中发送广播比较简单.只 ...

  4. nginx详解(代理服务器的解释+nginx 在linux 下的安装+nginx.conf 中的配置解释)

    一.概论 1.什么是代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬 ...

  5. Android关闭通知栏后toast无法提示的解决方案

    https://github.com/getActivity/ToastUtils PS:release版本注意加上混淆规则

  6. python 通过 实例方法 名字的字符串调用方法

    方式1 - 反射 hasattr 方法 判断当前实例中是否有着字符串能映射到的属性或者方法, 一般会在  getattr 之前作为判断防止报错 getattr 方法 获取到当前实例中传入字符串映射到的 ...

  7. Pytorch-拼接与拆分

    引言 本篇介绍tensor的拼接与拆分. 拼接与拆分 cat stack split chunk cat numpy中使用concat,在pytorch中使用更加简写的 cat 完成一个拼接 两个向量 ...

  8. Daily in Ipin

    Friday, October 23 1. [道高一尺,墙高一丈:互联网封锁是如何升级的] Monday, October 12 1. 晕死,忘了ubuntu的登录密码,鼓捣了半个小时,终于成功进入系 ...

  9. dozer转化对象

    依赖: commons-beanutils-1.9.3.jar.commons-lang-2.6.jar.dozer-5.3.2.jar.jcl-over-slf4j-1.7.25.jar.slf4j ...

  10. ParallelForTransform作业

    ParallelForTransform作业是另一种ParallelFor作业 ; 专为在变形上操作而设计. 注意:ParallelForTransform作业是Unity中用于实现IJobParal ...