@Primary 和 @Qualifier
问题
当一个接口有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相关推荐
- spring的@primary和@qualifier注解解决一个接口多个实现的注入问题
spring的@primary和@qualifier注解解决一个接口多个实现的注入问题 参考文章: (1)spring的@primary和@qualifier注解解决一个接口多个实现的注入问题 (2) ...
- @Primary 和 @Qualifier的区别
当一个接口有多个不同实现时,注入Spring的时候会产生org.springframework.beans.factory.NoUniqueBeanDefinitionException异常信息. ...
- @Primary和@Qualifier 使用
@Primary 当有两个带有注解的类,同时实现同一个接口的时候,spring 根据类型无法选择到底注入哪一个,这个时候,你就需要加上@Primary注解来作为唯一标识,可以优先选择哪一个具体的实现, ...
- @Primary和@Qualifier注解
@Primary和@Qualifier注解,都是处理@Autowired注入时,发现多个相同类型的冲突时,进行解决. 实际项目中,@Autowired,默认是byType注入,当发现多个实现类的时候, ...
- 解决多类型冲突的三种方式(@Primary、@Qualifier注解)
目录标题 知识预热 @Autowired(先byType后byName) @Qualifier(byName) @Primary(byType) @Primary和@Qualifier注解的作用 注入 ...
- apring中@Primary和@Qualifier注解的区别
首先说明一下两个注解的作用 @Primary:在众多相同的bean中,优先选择用@Primary注解的bean(该注解加在各个bean上) @Qualifier:在众多相同的bean中,@Qualif ...
- @Primary和@Qualifier
@Primary 和 @Qualifier_tom和cat的博客-CSDN博客_@primary 问题描述:就是一个接口KKService, 有两个实现类:@Service("kkServi ...
- Spring IoC是如何进行依赖注入的
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 依赖注入(DI) DI(Dependency Injection) ...
- Angular 依赖注入
问题描述 初学Angular,可能对一堆注解有些懵. 我们一起通过实例来探讨Angular的依赖注入. 一路尝试 @Injectable 一个命令建的StockService,一个手动建的TestSe ...
最新文章
- 跟各种诡异 Bug 打交道 13 年后的总结
- python散点图拟合曲线-python散点图拟合
- php foreach方法,forEach方法怎么使用
- html.renderaction 控制器,Html.RenderAction简单用法
- OpenGL顶点阵列对象
- 教你玩转CSS 属性选择器
- java常见经典知识点汇总
- 浪漫的表白 (5 分)
- hdfs 数据迁移_基于 JindoFS+OSS 构建高效数据湖
- 未来感十足:小米发布四曲面屏幕专利
- Pytorch:Dataset总结
- nvidia的jetson系列的方案_NVIDIAJetson系统在工业网络中的集成
- 厂商为什么喜欢使用堆叠?
- 从个人经历出发,说说如何0基础学Java
- IPv6: link local 地址fe80
- 浙江大学教授郑强的经典语录
- 如何使用 cri-docker 解决 Kubernetes 1.24 不支持 Docker 的问题
- layui实现导航栏目
- 计算机邮件地址保存到通讯录怎么找,怎样在电脑上查找手机备份中的联系人和短?...
- Pycharm的相关配置:改字体样式和大小、更改图片背景、更改控制台输出的字体颜色