apring中@Primary和@Qualifier注解的区别
首先说明一下两个注解的作用
@Primary:在众多相同的bean中,优先选择用@Primary注解的bean(该注解加在各个bean上)
@Qualifier:在众多相同的bean中,@Qualifier指定需要注入的bean(该注解跟随在@Autowired后)
下面一个小例子:
1.ServiceTest接口
public interface ServiceTest {void doSomething();
}
2.两个实现类
@Service("service1")
public class Service1 implements ServiceTest{@Overridepublic void doSomething() {System.out.println("this is service1");}}
@Service("service2")
public class Service2 implements ServiceTest{@Overridepublic void doSomething() {System.out.println("this is service2");}}
3 测试一
@Autowired
private ServiceTest serviceTest;@RequestMapping("showServiceTest")
public void showServiceTest(HttpServletRequest request, HttpServletResponse response) {this.serviceTest.doSomething();
}
启动报错
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'analysisTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.grac.web.controller.analysis.ServiceTest com.grac.web.controller.analysis.AnalysisTest.serviceTest; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.grac.web.controller.analysis.ServiceTest] is defined: expected single matching bean but found 2: service1,service2
4 测试二
@Autowired@Qualifier("service2")private ServiceTest serviceTest;@RequestMapping("showServiceTest")public void showServiceTest(HttpServletRequest request, HttpServletResponse response) {this.serviceTest.doSomething();}
控制台输出
this is service2
5 测试三
在service1上加入@Primary注解
@Service("service1")
@Primary
public class Service1 implements ServiceTest{@Overridepublic void doSomething() {System.out.println("this is service1");}}
@Autowiredprivate ServiceTest serviceTest;@RequestMapping("showServiceTest")public void showServiceTest(HttpServletRequest request, HttpServletResponse response) {this.serviceTest.doSomething();}
控制台输出
this is service1
apring中@Primary和@Qualifier注解的区别相关推荐
- @Primary和@Qualifier注解
@Primary和@Qualifier注解,都是处理@Autowired注入时,发现多个相同类型的冲突时,进行解决. 实际项目中,@Autowired,默认是byType注入,当发现多个实现类的时候, ...
- 解决多类型冲突的三种方式(@Primary、@Qualifier注解)
目录标题 知识预热 @Autowired(先byType后byName) @Qualifier(byName) @Primary(byType) @Primary和@Qualifier注解的作用 注入 ...
- spring的@primary和@qualifier注解解决一个接口多个实现的注入问题
spring的@primary和@qualifier注解解决一个接口多个实现的注入问题 参考文章: (1)spring的@primary和@qualifier注解解决一个接口多个实现的注入问题 (2) ...
- Springboot中@autowired和@resource注解的区别
@Autowired @Autowired是Spring提供的,默认按照byType 注入,也就是按bean的类型来传入.如果需要指定名字,那么需要使@Qualifier("这是bean的名 ...
- @Primary 和 @Qualifier的区别
当一个接口有多个不同实现时,注入Spring的时候会产生org.springframework.beans.factory.NoUniqueBeanDefinitionException异常信息. ...
- Spring中@Autowired、@Qualifier、@Resource的区别
转自: Spring中@Autowired.@Qualifier.@Resource的区别_老周聊架构的博客-CSDN博客_qualifier和resource区别1.@Autowired@Autow ...
- Table中Family和Qualifier的关系与区别(转载)
Table中Family和Qualifier的关系与区别 就像用MySQL一样,我们要做的是表设计,MySQL中的表,行,列的在HBase已经有所区别了,在HBase中主要是Table和Family和 ...
- spring中@Qualifier注解的使用
<该注解可以使用在类上.属性上.参数上.方法上> 1. 当使用在类上的时候,如下代码,@Qualifier注解里面填写的值就是当前类注入到IOC容器的bean的唯一标识(id),再使用到 ...
- Spring中 @Autowired注解与@Resource注解的区别
相同点: @Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上. 不同点: (1)提供方:@Autowired是由org.springframework.bea ...
最新文章
- 云上护航服务—保障云上的尖峰时刻
- 前序,中序,后序遍历
- 欠薪解决新途径:劳动者可向法院申请支付令。(拖欠工资就是违法)
- java 数据类型model_如何在角度2中使用类数据类型的ngModel?
- 计算机网络拓跋结构,实战 | 服务端开发与计算机网络结合的完美案例
- 【网络基础】《TCP/IP详解》学习笔记5
- jQuery基础学习笔记(下)
- 诗与远方:无题(八十)- 吸烟而作
- 运维工具 Ansible 快速入门教程
- 安装.Net Framework提示:无法建立到信任根颁发机构的证书链
- leetcode 868. Binary Gap
- 安装 | MATLAB2020a (64位) 安装教程及安装包下载链接
- 带省略号的比喻句_标点符号往往能引发人们的联想,例如:“省略号像一条漫长的人生道路,等着你去书写它留下的空白。”请以一种标点符号(省略号除外)为描述对象,写一个比喻句,形象地阐发某种生活道理。...
- c++ 函数之间 传递向量_将向量传递给C ++中的函数
- SSH-keygen用法
- python 东方财富接口_Python从东方财富网站获取数据,python,的
- mdin偏移_dif_input.c 源代码在线查看 - C8051F系列单片机开发与C语言编程 非常好的东西 资源下载 虫虫电子下载站...
- IC/FPGA一文练完
- c语言建立线性表输入,c语言 建立线性表 链式
- django-oscar学习笔记(一)