当前位置: 首页 > article >正文

springframework Ordered接口学习

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 {

    @Override
    public 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.kler.cn/a/325392.html

相关文章:

  • Python Excel XLS或XLSX转PDF详解:七大实用转换设置
  • 30-集群Backup Restore
  • 代码随想录第46期 单调栈
  • vue2和vue3:diff算法的区别?
  • 从零开始学习 sg200x 多核开发之 TF 存储卡根文件系统扩容
  • Python 打包教程:从零开始构建可分发的Python包
  • BOE(京东方)携故宫博物院举办2024“照亮成长路”公益项目落地仪式以创新科技赋能教育可持续发展
  • 计算机网络--TCP、UDP抓包分析实验
  • 2024年配置YOLOX运行环境+windows+pycharm24.0.1+GPU
  • [C语言]--自定义类型: 结构体
  • 【C/C++】错题记录(一)
  • pdf页面尺寸裁减
  • uni-app+vue3开发微信小程序使用本地图片渲染不出来报错[渲染层网络层错误]Failed to load local image resource
  • 黑马智数Day2
  • Python pyusb 使用指南【windows+linux】
  • 基于单片机的无线宠物自动喂食系统设计
  • 大数据复习知识点3
  • Python线程终止:如何优雅地结束一场“舞蹈”
  • Mybatis缓存机制(图文并茂!)
  • YOLOv8改进 | 融合篇,YOLOv8主干网络替换为MobileNetV4+CA注意机制+Powerful-IoU损失函数(全网独家首发,实现极限涨点)
  • 力扣刷题之1014.最佳观光组合
  • RK3588主板PCB设计学习(五)
  • CRC循环校验的功能
  • 串行化执行、并行化执行
  • 算法记录——树
  • 学生宿舍管理:Spring Boot技术驱动