Spring@主要注释

介绍:

当存在多个相同类型的bean时,使用Spring @Primary批注为标记的bean提供更高的优先级。

默认情况下,Spring按类型自动连线。 因此,当Spring尝试自动装配并且有多个相同类型的bean时,我们将获得NoUniqueBeanDefinitionException

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.programmergirl.Person]is defined: expected single matching bean but found 2: student, teacher
...

为了解决这个问题,我们可以选择使用Spring @Primary批注,从而将一个bean标记为主豆。

在本教程中,我们将更详细地探讨此批注的用法。

假设我们有以下配置类:

@Configuration
public class UniversityConfig {@Bean@Primarypublic Person student() {return new Student();}@Beanpublic Person teacher() {return new Teacher();}
}

TeacherStudent Bean都继承自Person ,因此我们将其标记为两个@Bean注释方法的返回类型。

但是,请注意, 我们已使用@Primary批注将Student bean标记为主要bean。 现在,让我们启动我们的应用程序:

AnnotationConfigApplicationContext context =AnnotationConfigApplicationContext(UniversityConfig.class);Person student = context.getBean(Person.class);
System.out.println(student.getClass());

我们将看到Spring尝试自动装配时,一个Student对象得到了优先选择。

使用

假设我们启用了组件扫描:

@Configuration
@ComponentScan(basePackages="com.programmergirl.beans")
public class UniversityConfig {   
}

对于这种情况, 我们可以使用@Primary直接注释我们的Spring组件类:

@Primary
@Component
public class Student implements Person {...
}@Component
public class Teacher implements Person {...
}

现在,当直接尝试插入不带@QualifierPerson类型时,将插入Student bean:

@Service
public class StudentService {// Student bean is primary and so it'll get injected@Autowiredprivate Person student;public void printStudentDetails() {System.out.println(student.getClass());...}
}

结论:

在本快速教程中,我们探讨了Spring中@Primary批注的用法。

顾名思义,当有多个相同类型的bean时,我们可以使用@Primary批注定义一个主对象。

翻译自: https://www.javacodegeeks.com/2019/10/spring-primary-annotation.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python帮助文档快捷键_Pycharm快捷键手册

AltEnter 自动添加包Ctrlt SVN更新Ctrlk SVN提交Ctrl / 注释(取消注释)选择的行CtrlShiftF 高级查找CtrlEnter 补全Shift Enter 开始新行TAB ShiftTAB 缩进/取消缩进所选择的行Ctrl Alt I 自动缩进行Ctrl Y 删除当前插入符所在的行Ctrl D 复制当前行、或者选择的块Ctrl …

arm 交叉编译找不到so_搭建交叉编译环境并验证

1. 搭建编译环境并验证1.1 实验目的 掌握嵌入式开发环境、交叉编译器的搭建、安装和配置方法 熟悉Linux应用程序的编译、调试方法,能够验证X86平台和ARM平台的差异1.2 实验内容 交叉编译器环境搭建 编写一个典型的Linux应用程序 使用GDB调试Linux程序(PC平台) 用Mak…

雷达的工作原理示意图_电磁阀的构成和工作原理示意图

电磁阀符号的含义:电磁阀符号由方框、箭头、“T”和字符构成。电磁阀图形符号的含义一般如下:1、用方框表示阀的工作位置,每个方块表示电磁阀的一种工作位置,即“位”。有几个方框就表示有几“位”,如二位三通表示有两…

JDK 14 Rampdown:内部版本27

马克 雷因霍尔德( Mark Reinhold)最近的帖子“ JDK 14现在处于Rampdown第一阶段 ”宣布“我们现在处于Rampdown第一阶段”,并且“整体功能已冻结”。 JDK 14 Early Access Build #27(2019/12/12)是一个繁重…

从金蝶k3到金税盘_经典全套金蝶K3操作流程大全

—结帐—期末结帐注意点:不能结帐的原因:(1)有未过帐的凭证(2)无权限(3)其他子系统未结帐(4)与其他用户冲突八、套打1、套打格式凭证:*上海TR101记帐凭证上海TR102收款凭证 纸张大小:自定义大小上海TR103付款凭证 宽度&#xff1a…

sqlserver拼接字符串换行_1.3【Python】第三章 字符串

人工智能入门与实战第一季:python基础语法字符串是比较常见的数据类型,在第一章中我们最早接触的数据类型就是字符串:"hello world",字符串可以用单引号’‘或双引号""来表示代码示例:name "…

jsf按钮响应事件_如何从JSF获取JSON响应?

jsf按钮响应事件许多JavaScript小部件都希望使用JSON格式的数据和选项。 如今,选择一个很酷的小部件并将其包装在一个复合组件中确实很容易。 但是第一个问题是如何发送AJAX请求并以正确的JSON格式接收响应。 JSF用户经常会提出这个问题 。 您需要的只是一个XHTML f…

mot数据集_谈谈ReID与MOT的关系

1.ReID与MOT的联系在MOT任务中,一般常用的特征模型有运动模型和表观模型,其中表观模型以行人重识别(ReID)类算法为主流。Re-ID任务主要解决的是跨摄像头场景下行人的识别与检索,其中存在给定了身份的图片序列query,需要为不同摄像…

jClarity:在Azure上升级到Java

在互联世界公共基础结构的新时代,最大和最重要的两个方面是Java和OpenJDK的诞生和兴起。 因此,许多公司将时间和资源投入到构建最先进的技术上,以确保整个行业在未来几年内在AdoptOpenJDK上拥有丰富的质量,而且免费的OpenJDK二进制…

装饰器模式应用场景_装饰器设计模式的应用

装饰器模式应用场景嗨,您好! 今天,我将展示装饰设计模式的实际应用。 装饰器设计模式是一种广泛使用的设计模式,同时在运行期间处理图形,树木和动态更改。 如果您正在寻找或尝试进行递归,这也是一个不错的…

Auto Lisp 标注子样式_CSS 核心样式

CSS核心样式粗细font-weight作用:设置文字是否加粗显示属性名: font-weight, 属于font属性的一个单-属性属性值有两种方式:单词类型、数字类型单词类型数字类型100-900之间的整百数字数字越大,文字显示越粗其中400等价于normal, 700等价于bold字体风格font-style作用…

Spring @Order批注

介绍: Spring Order注释是在Spring 2.0中首次引入的。 然后,它仅用于定义AspectJ建议中的顺序。 在Spring 4.0的后面,对该注释的实现进行了进一步改进。 从那时起,它还支持对Java数组或List之类的集合中的Spring组件或bean进行排序…

stm32 内部sram大小_让STM32的外部SRAM操作跟内部SRAM一样

让STM32的外部SRAM操作跟内部SRAM一样前几天看到开源电子论坛(openedv)有人在问这个问题,我特意去做了这个实验,这样用外部SRAM就跟用内部SRAM一样,不用自己去申请内存,也不用考虑什么内存地址,一切让编译器自己去解决…

react动态改变选中不选中_当使用react hooks选中任何复选框时,如何使启用按钮起作用?...

当选中任何复选框时,我在启用按钮时有一个错误。目前它在第一次点击时不起作用,而只在第二次点击时起作用。取消选中复选框也适用于第一次单击。我认为这与各州有关,但我不太明白是什么导致了这个问题。checked.length > 0 ? setTaskBtnsEnabled(true) : setTaskBtnsEnable…

javafx_JavaFX技巧4:总结

javafx在为JavaFX开发自定义控件时,我强烈建议您遵循JavaFX核心控件的脚步,并尽可能使控件的API最终化,并将“ final”关键字放在所有方法声明的前面。 例 在FlexGanttFX中,我有很多看起来像这样的代码: public fina…

均质机工作原理动画_3D动画演示:有刷直流电机的工作原理

点上面蓝色字体直观学机械可长期订阅我们法律顾问:赵建英律师下面这张图是电机的分类,在看完这张图后,大家基本也就知道咱们今天说的有刷电机具体属于哪一类了。下面这个是LearnEngineering制作的动画,讲解的是直流电机的工作原理…

通过SSL发送的Java邮件

抽象 本博客的目的是演示如何使用Java Mail通过具有SSL连接的SMTP服务器发送电子邮件。 免责声明 这篇文章仅供参考。 在使用所提供的任何信息之前,请认真思考。 从中学到东西,但最终自己做出决定,风险自负。 要求 我使用以下主要技术完成了…

a113 智能音箱芯片方案_高通入局智能音箱,首款四核单芯片方案曝光

不得不说,智能音箱已经成为目前重要的科技品类之一,许多公司包括亚马逊、谷歌、苹果、阿里巴巴、小米等等,都在大举进军智能音箱市场。为了尽可能为更多产品提供核心原件,近日,高通公司推出了一款全新的SOC系列——QCS…

OCA第6部分中的Java难题

即使对于新的Java开发人员,构造函数也可能不是什么大谜。 本质上,当您创建一个类的实例时,该类的构造函数就会启动。 在Java Puzzlers系列的第6部分中,我们将看到一个与构造函数有关的案例。 public class Puzzler { public Puzzl…

隐藏水滴屏的软件_屏下摄像头,实现这一全面屏终极方案有多难?

为了实现真正全面屏,手机厂商们到底能有多拼?在奔向全面屏的征途里,导航键、听筒、传感器、指纹识别模组等都被成功解决,隐藏在边框或屏幕底。唯独前置摄像头,成为全面屏征途的最后一块终极障碍。这场由iPhone X刘海屏…