springframework Ordered接口学习

server/2024/9/25 11:05:34/

Ordered接口介绍

完整路径: org.springframework.core.Ordered

Ordered 接口是 Spring 框架中的一个核心接口,用于定义对象的顺序。这个接口通常用于需要排序的组件,例如 Spring 中的 Bean、过滤器(Filters)、拦截器(Interceptors)等。通过实现 Ordered 接口,你可以控制这些组件的执行顺序。

顺序值越小,优先级越高:getOrder() 方法返回的值越小,表示该对象的优先级越高。例如,值为 0 的对象会比值为 1 的对象先执行。

默认顺序值:如果没有实现 Ordered 接口,Spring 会为 Bean 分配一个默认的顺序值。你可以通过 @Order 注解来指定顺序值,而不需要实现 Ordered 接口。

Ordered接口代码

  • HIGHEST_PRECEDENCE:这是一个常量,值为 Integer.MIN_VALUE,表示最高的优先级。具有此值的对象将首先执行。
  • LOWEST_PRECEDENCE:这是一个常量,值为 Integer.MAX_VALUE,表示最低的优先级。具有此值的对象将最后执行。
  • getOrder() 方法,getOrder():这个方法返回对象的顺序值。较小的值表示较高的优先级,较大的值表示较低的优先级。

public interface Ordered {/*** 用于最高优先级的常量值。* @see java.lang.Integer#MIN_VALUE*/int HIGHEST_PRECEDENCE = Integer.MIN_VALUE;/*** 用于最低优先级的常量值。* @see java.lang.Integer#MAX_VALUE*/int LOWEST_PRECEDENCE = Integer.MAX_VALUE;/*** 获取对象的顺序值。* <p>较高的值被解释为较低的优先级。因此,具有最低值的对象具有最高的优先级(类似于 Servlet 的 {@code load-on-startup} 值)。* <p>相同的顺序值将导致受影响对象的任意排序位置。* @return 顺序值* @see #HIGHEST_PRECEDENCE* @see #LOWEST_PRECEDENCE*/int getOrder();}

Ordered接口使用场景


Spring Bean 的排序:在 Spring 容器中,如果你有多个实现了 Ordered 接口的 Bean,Spring 会根据 getOrder() 方法返回的值来决定它们的初始化和执行顺序。

过滤器(Filters)和拦截器(Interceptors):在 Spring Web 应用中,过滤器和拦截器也可以实现 Ordered 接口,以控制它们的执行顺序。

自定义排序:在任何需要排序的场景中,你都可以使用 Ordered 接口来定义对象的顺序。

import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;@Component
public class OrderedDemoBean implements Ordered {@Overridepublic int getOrder() {// 返回顺序值return 1; }public void doSomething() {System.out.println("OrderedDemoBean is doing something.");}
}

 @Order 注解


Spring 还提供了 @Order 注解,可以用来替代实现 Ordered 接口。

使用 @Order 注解的示例:

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;@Order(1)
@Component
public class OrderedDemoBean {public void doSomething() {System.out.println("OrderedDemoBean is doing something.");}
}





http://www.ppmy.cn/server/121793.html

相关文章

Java 之泛型详解

1. 泛型是什么&#xff1f; 泛型是 Java 中一种强大的机制&#xff0c;它允许你编写可以与多种数据类型一起工作的代码&#xff0c;而无需在编译时指定具体的类型。这样可以提高代码的灵活性、可读性和安全性。 2. 为什么要使用泛型&#xff1f; 泛型可以帮助我们编写更安全…

chorme浏览器 您的连接不是私密连接

‌当浏览器显示“您的连接不是私密连接&#xff0c;攻击者可能会试图从 localhost 窃取您的信息&#xff08;例如&#xff1a;密码、消息或信用卡信息&#xff09;”的警告时&#xff0c;这通常意味着您正在尝试访问的网站的安全证书存在问题&#xff0c;可能是因为它使用的是自…

C语言之初阶指针

目录 前言1. 什么是指针代码展示 2. 计算机如何编址3. 指针类型指针类型的定义指针类型的意义 4. 野指针4.1. **指针未初始化**4.2. **指针越界访问**4.3. **指针指向的空间被释放** 5. 指针运算6. 指针和数组7. 二级指针8. 指针数组总结 前言 本篇将深入探讨C语言中至关重要的…

【C++】托管类和托管函数

托管类和托管函数 1. 托管类 托管类是指在 .NET 环境中运行的类&#xff0c;它们由公共语言运行时&#xff08;CLR&#xff09;管理。托管类具有以下特点&#xff1a; 自动内存管理&#xff1a;托管类的实例由 CLR 的垃圾回收机制管理&#xff0c;自动处理内存的分配和释放。…

pg入门5—pg有哪些系统schema

在 PostgreSQL 中&#xff0c;除了用户创建的 schema 之外&#xff0c;系统还自动创建了一些系统 schema&#xff0c;用于管理数据库的元数据、系统信息以及维护操作。以下是 PostgreSQL 中的常见系统 schema&#xff1a; 1. pg_catalog 用途&#xff1a;pg_catalog 是 Postg…

微服务架构---Ribbon\Feign

Ribbon(负载均衡) Ribbon概述 在 SpringCloud 中&#xff0c; Nacos⼀般配合Ribbon进行使用&#xff0c;Ribbon提供了客户端负载均衡的功能&#xff0c;Ribbon利用从Nacos中读取到的服务信息&#xff0c;在调用服务节点提供的服务时&#xff0c;会合理的进行负载。 Ribbon作…

C语言练习:通讯录

简单版代码讲解&#xff1a; 这个版本不涉及文件操作以及动态内存分配&#xff0c;有助于理解代码。 文件管理 这里我们分了三个文件&#xff0c;.h 文件里给出类型声明和函数声明&#xff0c;contact.c 文件是具体的实现&#xff0c;test.c文件里是游戏的实现逻辑。 test.c…

Pinia从安装到使用

什么是Pinia 添加Pinia到vue项目 使用Pinia实现计数器案例 counter.js import {defineStore} from "pinia"; import {ref} from "vue";export const useCounterStore defineStore(coutner,()>{//定义数据&#xff08;state&#xff09;const count r…