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