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.");
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值