注解@Order或者接口Ordered的作用是定義Spring IOC容器中Bean的執行順序的優先級,而不是定義Bean的加載順序,Bean的加載順序不受@Order或Ordered接口的影響;
1.@Order的注解源碼解讀
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) @Documented public @interface Order { /** * 默認是最低優先級,值越小優先級越高 */ int value() default Ordered.LOWEST_PRECEDENCE; }
- 注解可以作用在類(接口、枚舉)、方法、字段聲明(包括枚舉常量);
- 注解有一個int類型的參數,可以不傳,默認是最低優先級;
- 通過常量類的值我們可以推測參數值越小優先級越高;
2.Ordered接口類
package org.springframework.core; public interface Ordered { int HIGHEST_PRECEDENCE = -2147483648; int LOWEST_PRECEDENCE = 2147483647; int getOrder(); }
在spring內部,對基於spring xml的應用,spring使用OrderComparator類來實現排序。對基於注解的應用,spring采用AnnotationAwareOrderComparator來實現排序。