Spring @Order批注

介绍:

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

对于基于Spring XML的应用程序,此注释在内部使用OrderComparator类,对于基于注释的Spring应用程序,此注释在内部使用AnnotationAwareOrderComparator

在本教程中,我们将探讨如何使用此注释。

Spring

Spring @Order批注仅接受一个可选参数value ,该参数确定组件的顺序:

@Retention(value=RUNTIME)
@Target(value={TYPE,METHOD,FIELD})
@Documented
public @interface Order

此参数的值越低,其优先级越高。 换句话说,值较低的将在Java List或数组中排在第一位。

此参数默认值为Ordered。 LOWEST_PRECEDENCE 。 这意味着标记的组件在所有有序bean中的优先级最低。 类似地,我们可以使用Ordered.HIGHEST_PRECEDENCE标记具有最高优先级的Spring bean。

为什么使用?

@Order批注的一些常见用例包括:

  • 在AspectJ中订购建议; 最初引入它的真正意图
  • 当我们想定义加载CommandLineRunnerApplicationRunner类的顺序时
  • 用于以有序方式在Java数组或List中注入bean 列表
  • 在Spring Security的情况下定义过滤器执行的顺序

设置示例:

假设我们有一个Vehicle界面:

public interface Vehicle {public String getDetails();
}

我们定义了一些实现类:

@Order(1)
@Component
public class Bike implements Vehicle {public String getDetails() {return "Bike: 2 Wheeler";}
}@Order(2)
@Component
public class Car implements Vehicle {public String getDetails() {return "Car: 4 Wheeler";}
}@Order(3)
@Component
public class Truck implements Vehicle {public String getDetails() {return "Truck: 6 Wheeler";}
}

在这里,我们已经订购了所有这三个Spring组件。 Bike bean的优先级最高,其次是Car ,最后是Truck

测试我们的实施:

让我们快速编写一个Junit来看看它是如何工作的:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SampleAppTest {@Autowiredprivate List<Vehicle> vehicles;@Testpublic void testSpringOrderAnnotation() {assertThat(vehicles.get(0).getDetails(), isEqual("Bike: 2 Wheeler"));assertThat(vehicles.get(1).getDetails(), isEqual("Car: 4 Wheeler"));assertThat(vehicles.get(2).getDetails(), isEqual("Truck: 6 Wheeler"));}
}

显然, Spring根据其优先级将我们的bean自动连接到了车辆 Java List中

结论

在本微型教程中,我们探讨了Spring @Order批注的用法。

翻译自: https://www.javacodegeeks.com/2019/09/spring-order-annotation.html

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

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

相关文章

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

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

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

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

javafx_JavaFX技巧4:总结

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

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

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

通过SSL发送的Java邮件

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

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

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

OCA第6部分中的Java难题

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

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

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

java ee api_Java EE并发API教程

java ee api这是一个示例章节&#xff0c;摘自Francesco Marchioni编辑的WildFly上的实用Java EE 7开发 。 本章讨论了新的Java EE并发API&#xff08;JSR 236&#xff09; &#xff0c;它概述了使用一组托管资源在Java EE容器上并行执行任务的标准方法。 为了描述如何在您的应…

二进制_简学:二进制数制的应用

设现有正整数150&#xff0c;二进制形式为10010110&#xff0c;现有如下题目&#xff0c;求其尽可能简单的解法。题目一&#xff1a;判断该正整数是否是2的乘方&#xff1b;解法&#xff1a;由上表可以看出2的乘方的二进制形式只有一个bit为1&#xff0c;因此判断一个正整数A是…

令人惊讶的注射

所以&#xff0c;我欠吉姆道歉。 他编写了一个有效的模拟和JUnit测试&#xff0c;我在回顾中告诉他&#xff0c;我认为它没有达到他的预期。 当我错了时&#xff0c;这种情况对我来说就像是一个错误 。 称其为理想的意外副作用。 假设您有以下两类&#xff1a; public class S…

swagger 动态设置版本号_如何快速玩转swagger

Spring Boot 框架是目前非常流行的微服务框架&#xff0c;我们很多情况下使用它来提供 Rest API。而对于 Rest API 来说很重要的一部分内容就是文档&#xff0c;Swagger 为我们提供了一套通过代码和注解自动生成文档的方法&#xff0c;这一点对于保证 API 文档的及时性将有很大…

angular java_带有Angular JS的Java EE 7 –第1部分

angular java今天的帖子将向您展示如何使用Java EE 7和Angular JS构建一个非常简单的应用程序。 在去那里之前&#xff0c;让我告诉您一个简短的故事&#xff1a; 我必须承认&#xff0c;我从来都不是Java语言的忠实拥护者&#xff0c;但是我仍然记得我第一次使用它。 我不记得…

操作系统的msxml组件版本过低_Zabbix 5.0 LTS 版本安装

zabbix 5.0 版本于 5 月 11 日正式发布&#xff0c;是最新的 LTS(长期支持)版本&#xff0c;5.0 带来很多功能和特性&#xff0c;后面会陆续推出文章介绍&#xff0c;下面主要介绍下 5.0 版本的安装。环境要求5.0 版本对基础环境的要求有大的变化&#xff0c;最大的就是对 php …

登录判断_Spring Security之多次登录失败后账户锁定功能的实现

在上一次写的文章中&#xff0c;为大家说到了如何动态的从数据库加载用户、角色、权限信息&#xff0c;从而实现登录验证及授权。在实际的开发过程中&#xff0c;我们通常会有这样的一个需求&#xff1a;当用户多次登录失败的时候&#xff0c;我们应该将账户锁定&#xff0c;等…

通过TLS发送的Java邮件

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

html实体转化字符串 php_php将字符串转为HTML的实体引用的一个类

class HtmlEncode {static $_convertToHtmlEntitiesSrcEncodingUTF-8;/*** 将非ASCII字符串转换成HTML实体** example HtmlEncode::encode("我信了"); //输出:我信了* param string $s 要进行编码的字符串* return string 返回HTML实体引用*/public static function …

arcgis导入excel字段不显示_ArcGIS从excel中导入坐标出现空白无法选择字段

怎样将PDF转成EXCEL怎样将PDF转成EXCEL EXCEL和PDF这两种文档大家应该都比较熟悉&#xff0c;EXCEL表格是使用于数据图表得整理&#xff0c;而PDF文件是用于扫描或者存档&#xff0c;但是这两者之间经常需要进行转换得&#xff0c;比如说经常需要将归档的PDF文件转换成EXCEL表格…

atomic java_在Java中添加@atomic操作

atomic java总览 原子操作如何在Java中工作&#xff0c;OpenJDK / Hotspot中是否存在可以转换为原子的当前替代方法。 反馈 在我以前的文章中&#xff0c; 对可变字段进行原子操作。 有几次指出&#xff0c;不管善意如何&#xff0c;“修复”先前的行为都不太可能继续进行。 …

a4988 脉宽要求_Allegro MicroSystems - A4988: 带转换器和过流保护的 DMOS 微步驱动器

A4988 是一款完全的微步电动机驱动器&#xff0c;带有内置转换器&#xff0c;易于操作。该产品可在全、半、1/4、1/8 及 1/16 步进模式时操作双极步进电动机&#xff0c;输出驱动性能可达 35 V 及 2 A。A4988 包括一个固定关断时间电流稳压器&#xff0c;该稳压器可在慢或混合…