问题

当一个接口有2个不同实现时,使用@Autowired注解时会报org.springframework.beans.factory.NoUniqueBeanDefinitionException异常信息

解决

(1)使用Qualifier注解,选择一个对象的名称,通常比较常用

(2)Primary可以理解为默认优先选择,不可以同时设置多个,内部实质是设置BeanDefinition的primary属性

注解 备注
@Primary 优先方案,被注解的实现,优先被注入
@Qualifier 先声明后使用,相当于多个实现起多个不同的名字,注入时候告诉我你要注入哪个

使用实例

一:@Qualifier

接口:

public interface EmployeeService {public EmployeeDto getEmployeeById(Long id);
}

接口对应的两个实现类:EmployeeServiceImpl和EmployeeServiceImpl1:接口对应的两个实现类:EmployeeServiceImpl和EmployeeServiceImpl1:

@Service("employeeService")
public class EmployeeServiceImpl implements EmployeeService {public EmployeeDto getEmployeeById(Long id) {return new EmployeeDto();}
}
@Service("employeeService1")
public class EmployeeServiceImpl1 implements EmployeeService {public EmployeeDto getEmployeeById(Long id) {return new EmployeeDto();}
}

   这个时候就要用到@Qualifier注解了,qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,我们修改调用代码,添加@Qualifier注解,需要注意的是@Qualifier的参数名称必须为我们之前定义@Service注解的名称之一!

@Controller
@RequestMapping("/emplayee.do")
public class EmployeeInfoControl {@Autowired@Qualifier("employeeService")EmployeeService employeeService;@RequestMapping(params = "method=showEmplayeeInfo")public void showEmplayeeInfo(HttpServletRequest request, HttpServletResponse response, EmployeeDto dto) {//#略}
}

二、@Primary:和@Qualifier 一样,@Primary也一样,使用场景经常是:在spring 中使用注解,常使用@Autowired, 默认是根据类型Type来自动注入的。但有些特殊情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况下 @Primary 的作用就出来了。

简单例子:

接口:

public interface Singer {String sing(String lyrics);
}

有下面的两个实现类:

@Component // 加注解,让spring识别
public class MetalSinger implements Singer{@Overridepublic String sing(String lyrics) {return "I am singing with DIO voice: "+lyrics;}
}
@Primary
@Component
public class OperaSinger implements Singer{@Overridepublic String sing(String lyrics) {return "I am singing in Bocelli voice: "+lyrics;}
}

@Primary 和 @Qualifier相关推荐

  1. spring的@primary和@qualifier注解解决一个接口多个实现的注入问题

    spring的@primary和@qualifier注解解决一个接口多个实现的注入问题 参考文章: (1)spring的@primary和@qualifier注解解决一个接口多个实现的注入问题 (2) ...

  2. @Primary 和 @Qualifier的区别

      当一个接口有多个不同实现时,注入Spring的时候会产生org.springframework.beans.factory.NoUniqueBeanDefinitionException异常信息. ...

  3. @Primary和@Qualifier 使用

    @Primary 当有两个带有注解的类,同时实现同一个接口的时候,spring 根据类型无法选择到底注入哪一个,这个时候,你就需要加上@Primary注解来作为唯一标识,可以优先选择哪一个具体的实现, ...

  4. @Primary和@Qualifier注解

    @Primary和@Qualifier注解,都是处理@Autowired注入时,发现多个相同类型的冲突时,进行解决. 实际项目中,@Autowired,默认是byType注入,当发现多个实现类的时候, ...

  5. 解决多类型冲突的三种方式(@Primary、@Qualifier注解)

    目录标题 知识预热 @Autowired(先byType后byName) @Qualifier(byName) @Primary(byType) @Primary和@Qualifier注解的作用 注入 ...

  6. apring中@Primary和@Qualifier注解的区别

    首先说明一下两个注解的作用 @Primary:在众多相同的bean中,优先选择用@Primary注解的bean(该注解加在各个bean上) @Qualifier:在众多相同的bean中,@Qualif ...

  7. @Primary和@Qualifier

    @Primary 和 @Qualifier_tom和cat的博客-CSDN博客_@primary 问题描述:就是一个接口KKService, 有两个实现类:@Service("kkServi ...

  8. Spring IoC是如何进行依赖注入的

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 依赖注入(DI) DI(Dependency Injection) ...

  9. Angular 依赖注入

    问题描述 初学Angular,可能对一堆注解有些懵. 我们一起通过实例来探讨Angular的依赖注入. 一路尝试 @Injectable 一个命令建的StockService,一个手动建的TestSe ...

最新文章

  1. 跟各种诡异 Bug 打交道 13 年后的总结
  2. python散点图拟合曲线-python散点图拟合
  3. php foreach方法,forEach方法怎么使用
  4. html.renderaction 控制器,Html.RenderAction简单用法
  5. OpenGL顶点阵列对象
  6. 教你玩转CSS 属性选择器
  7. java常见经典知识点汇总
  8. 浪漫的表白 (5 分)
  9. hdfs 数据迁移_基于 JindoFS+OSS 构建高效数据湖
  10. 未来感十足:小米发布四曲面屏幕专利
  11. Pytorch:Dataset总结
  12. nvidia的jetson系列的方案_NVIDIAJetson系统在工业网络中的集成
  13. 厂商为什么喜欢使用堆叠?
  14. 从个人经历出发,说说如何0基础学Java
  15. IPv6: link local 地址fe80
  16. 浙江大学教授郑强的经典语录
  17. 如何使用 cri-docker 解决 Kubernetes 1.24 不支持 Docker 的问题
  18. layui实现导航栏目
  19. 计算机邮件地址保存到通讯录怎么找,怎样在电脑上查找手机备份中的联系人和短?...
  20. Pycharm的相关配置:改字体样式和大小、更改图片背景、更改控制台输出的字体颜色

热门文章

  1. Truelore星桥,为投标全过程保驾护航
  2. java角谷_Java:利用递归方法实现角谷定理
  3. ZCMU1411:喜闻乐见的a+b
  4. 20个经典管理学定律
  5. 张飞硬件课程第六部:开关电源(上)
  6. BLDC(直流无刷电机)反电动势测量/观测模型
  7. 我的读书笔记—峰与谷
  8. 日语标点符号用法解说!
  9. Google Earth Engine(GEE)——NDWI水体阈值的监测
  10. 搭建开源的运维工单平台