Spring注解@Order的使用

@Order:注解@Order的作用是定义Spring容器加载Bean的顺序,而不是类的加载顺序

1,注解类源码
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Documented
public @interface Order {

	/**
	 * The order value.
	 * <p>Default is {@link Ordered#LOWEST_PRECEDENCE}.
	 * @see Ordered#getOrder()
	 */
	int value() default Ordered.LOWEST_PRECEDENCE;

}
2,常量类
public interface Ordered {

	/**
	 * Useful constant for the highest precedence value.
	 * @see java.lang.Integer#MIN_VALUE
	 */
	int HIGHEST_PRECEDENCE = Integer.MIN_VALUE;

	/**
	 * Useful constant for the lowest precedence value.
	 * @see java.lang.Integer#MAX_VALUE
	 */
	int LOWEST_PRECEDENCE = Integer.MAX_VALUE;

	int getOrder();

}

注解可以作用在类、方法、字段声明(包括枚举常量);
注解有一个int类型的参数,可以不传,默认是最低优先级;
通过常量类的值我们可以推测参数值越小优先级越高;

3,代码测试
@Configuration(proxyBeanMethods = false)
public class FilterConfig {

    @Bean
    @Order(1)
    public TokenFilter tokenFilter() {
        return new TokenFilter();
    }

    @Bean
    @Order(2)
    public ApiSignFilter signFilter() {
        return new ApiSignFilter();
    }
}
public class ApiSignFilter implements WebFilter {

    public ApiSignFilter() {
        System.out.println("order:2");
    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        return chain.filter(exchange);
    }
}

public class TokenFilter implements WebFilter {

    public TokenFilter() {
        System.out.println("order:1");
    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        return chain.filter(exchange);
    }
}

启动项目:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39513430/article/details/105835724