介绍
@Order或者Ordered接口的作用是定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序(区别于@Priority);默认是最低优先级,值越小优先级越高。
package org.springframework.core.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.Ordered;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Documented
public @interface Order {
int value() default Ordered.LOWEST_PRECEDENCE;
}
package org.springframework.core;
public interface Ordered {
int HIGHEST_PRECEDENCE = Integer.MIN_VALUE;
int LOWEST_PRECEDENCE = Integer.MAX_VALUE;
int getOrder();
}
使用
public class OrderService {
}
@ComponentScan("com.sonnie")
public class AppConfig {
@Bean
@Order(3)
public OrderService orderService3() {
System.out.println("orderService3 is creating");
return new OrderService();
}
@Bean
@Order(2)
public OrderService orderService2() {
System.out.println("orderService2 is creating");
return new OrderService();
}
}
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
}
打印结果:
orderService2 is creating
orderService3 is creating