@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 CatConfig {
@Bean
@Order(3)
public Cat cat1(){
System.err.println("order1------>");
return new Cat("cat1()");
}
@Bean
@Order(2)
public Cat cat2(){
System.err.println("order2------>");
return new Cat("cat2()");
}
@Bean
@Order(1)
public Cat cat3(){
System.err.println("order3------>");
return new Cat("cat3()");
}
@Bean
public Cat Cat4(List<Cat> cat){
cat.forEach(s ->System.out.println(s.getName()));
return cat.get(1);
}
}
启动项目: