spring order_Spring @Order批注

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组件。 自行车豆的优先权最高,其次是汽车 ,其次是卡车

测试我们的实施:

让我们快速编写一个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

spring order

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

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

相关文章

AVL树

【0】README 0.1&#xff09;本文给出了平衡二叉树&#xff08;AVL树&#xff09;的插入例程涉及到的单旋转双旋转的概念&#xff0c;并给出了代码实现&#xff1b; 0.2&#xff09;本文源代码均为原创&#xff0c; 当然相关idea 还是借鉴人家的&#xff1b;&#xff08;真心…

spring 注释_Spring@懒惰注释

spring 注释介绍&#xff1a; 默认情况下&#xff0c; Spring框架在应用程序启动时加载并热切初始化所有bean。 在我们的应用程序中&#xff0c;我们可能有一些非常消耗资源的bean。 我们宁愿根据需要加载此类bean。 我们可以使用Spring Lazy批注实现此目的 。 在本教程中&…

管理系统的账户设计(涉及注册/登录逻辑)

文章目录方案一方案二方案三方案一 类似华为云IAM&#xff08;Identity and Access Management 身份和访问管理&#xff09;用户&#xff0c;阿里云的 RAM&#xff08;Resource Access Management 资源访问管理&#xff09;用户 机构有独立的账户&#xff08;主账户&#xff…

opencv生成日志_OpenCV-Utils学习日志:VideoCapture使用样例

1.VideoCapture可以打开多种来源的数据流&#xff0c;但常见的是相机、视频及图像序列三类数据流&#xff1a;(1)打开相机数据流&#xff0c;需要指定相机在主机上的设备编号&#xff0c;若主机上只有一个相机则编号通常是0。(2)打开视频数据流&#xff0c;需要指定视频的完整路…

jdbc查询序列_JDBC –模拟序列

jdbc查询序列也许我们每个人在程序员的生活中至少遇到过一次这个问题- 如何模拟数据库序列&#xff1f; 在下面&#xff0c;您可能会发现我对该问题解决方案的各种了解。 假设我们有一个接口定义了所需的API&#xff0c;用于返回整数序列&#xff1a; public interface Sequen…

利用 GregorianCalendar 制作当前月的月历

【0】README 0.1&#xff09;本文文字总结于 core java volume 1 &#xff0c; 源代码均为原创&#xff1b; 0.2&#xff09;本文旨在熟悉 GregorianCalendar 日历类&#xff0c;每一天就是一个GregorianCalendar 日历类&#xff0c;一天有很多的日历属性&#xff0c;觉得用它…

pyecharts怎么绘制散点图_PyeCharts绘制各种图形

简介PyeCharts 是一个用于生成 Echarts 图表的类库&#xff0c;用其生成的图可视化效果非常棒&#xff0c;而且使用起来非常简单。下面是一些常用图的pyecharts实现方法柱状图bar pye.Bar("柱状图")#新建柱状图bar.add("服装", #图例名称["衬衫"…

junit junit_穿越JUnit流

junit junit关于JUnit 5迁移的好处之一是&#xff0c;您可以在老式模式下运行JUnit 4测试&#xff0c;并且所有内容仍然兼容。 不利的一面是&#xff0c;某些注释和方法在JUnit 4和JUnit 5中具有相同的名称&#xff0c;并且当两组库依赖项都可用时&#xff0c;很容易导入错误的…

被遗忘的软件产品形态

从2010年以后&#xff0c;很多公司开发的软件产品&#xff0c;很少有客户端了&#xff0c;web2.0之后&#xff0c;主流的业务系统基本上都是基于Web去构建业务系统。这几年见到的业务应用系统都是基于Web的构建的。而在To C市场&#xff0c;几乎就没有客户端了&#xff0c;都是…

vue进行判断使用class_vue判断dom的class

vue点击给dom添加class然后获取含有class的dom{{item.name}}{{item2.name}}jschek(index2, index) {this.iac[index2] indexthis.iac this.iac.concat([]);this.checkchose()},checkchose:function(){var chosethisvar chosedomchose.$refs.choseboxconsole.log(chosedom)for…

方法参数的值调用+引用调用+深浅拷贝

【0】README 0.1&#xff09;本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理清值调用引用调用&#xff1b; 【1】参数传递给方法的专业术语&#xff1a; 1.1&#xff09;值调用&#xff1a;它表示方法接收的是调用者提供的值&#xff1b; 1.2&#xff09;引用…

设计模式 工厂方法_工厂方法设计模式

设计模式 工厂方法工厂方法模式是流行的创作设计模式之一。 它并不特别依赖于工厂对象来创建对象。 而是要在同一类中使用单独的方法来创建对象。 Factory Method模式定义了一个用于创建对象的接口&#xff0c;但是让子类决定如何实例化其对象。 每个子类必须定义其Factory方法…

靖江机器人怎么样_铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?...

原标题&#xff1a;铁饭碗不保&#xff1f;靖江可能消失的12大职业&#xff01;快看有你的工作没&#xff1f;无人飞机、无人驾驶、智能机器人....你能想象这些充满现代感的高科技正在改变我们的生活吗&#xff1f;在科技高速发展的今天人工智能逐渐能够代替人类的部分工作但&a…

MarkdownPad 汉化破解(含下载地址)

转自 http://jingyan.baidu.com/article/ca41422fe209271eaf99ed7c.html MarkdownPad是一个全功能Markdown编辑器的Windows。 【1】MarkdownPad 汉化破解&#xff08;含下载地址&#xff09; 工具/原料 MarkdownPad 2.4 方法/步骤 软件 下载地址&#xff08;本软件为绿色版…

捡对象引流脚本 内容_对象和索引流

捡对象引流脚本 内容我本来要写一篇关于如何将流与每个元素的索引混合的文章&#xff0c;但是Baeldung上的人们已经很好地涵盖了这个主题 &#xff01; 鉴于我是他们编辑团队的一员&#xff0c;我为他们/我们感到自豪。 有趣的是&#xff0c;特别是Streams中的Java函数式编程如…

散列之再散列

【0】README 0.1&#xff09;本文描述总结于 数据结构与算法分析&#xff0c; 但源代码为原创&#xff1b; 0.2&#xff09;为什么写这篇博文&#xff1f; 再散列的代码实现 包括了 解决冲突的方法实现&#xff1b;很有代表性&#xff1b;&#xff08;本源代码采用的解决冲突…

激活策略 查询_5个提问,详细介绍北极星指标的策略框架

北极星指标&#xff08;North Star Metric&#xff09;已经逐渐成为许多公司指导产品发展的重要指标&#xff0c;本文通过五个设问和多个行业案例&#xff0c;系统性地介绍北极星指标这类产品策略框架。如今有非常多的人在谈论和使用北极星指标&#xff08;North Star Metric&a…

变色龙嗅探卡功能_变色龙功能

变色龙嗅探卡功能在《神秘博士》中&#xff0c;卡梅利恩&#xff08;Kamelion&#xff09;角色是一个可以采取任何形式的机器人。 据称&#xff0c;他们使用的物理道具非常麻烦&#xff0c;只有其创建者才能理解&#xff0c;而该创建者并没有帮助纠正它。 因此&#xff0c;Cha…

老人与海好词100英文带翻译_《老人与海》经典语录(英文+译文)

《老人与海》是海明威于1951年在古巴写的一篇中篇小说&#xff0c;于1952年出版。是海明威最著名的作品之一。它围绕一位老年古巴渔夫&#xff0c;与一条巨大的马林鱼在离岸很远的湾流中搏斗而展开故事的讲述。它奠定了海明威在世界文学中的突出地位&#xff0c;这篇小说相继获…

java多态+多态中隐含的问题

【0】RAEDME 0.1&#xff09;本文总结于 core java volume 1&#xff0c; 感觉多态中存在的这个问题很新颖&#xff0c;故分享之&#xff1b; 【1】继承与is-a法则 1.1&#xff09;有一个用来判断是否应该设计为继承关系的规则&#xff1a; 这就是 is-a 规则&#xff0c; 它…