Ordered
接口和@order
注解都可以用于控制类的处理顺序,规则:数字越小,越先加载!
有一个常用的使用场景,就是在Filter中。我们在自定义的Filter中可以使用@Order
注解控制Filter的拦截顺序,但在Spring源码中,也会采用实现Ordered
接口来控制拦截顺序。
一般情况下是定义了一组类实现Ordered接口或者使用@order注解。然后使用Comparator实现排序,就可以实现排序。
Spring提供了AnnotationAwareOrderComparator
类,来完成对上述类的排序。
代码实现:
public abstract class ReadService {
public abstract void read();
}
public class WordReadSeviceImpl extends ReadService implements Ordered {
@Override
public void read() {
System.out.println("3. 读单词");
}
@Override
public int getOrder() {
return 3;
}
}
@Order(2)
public class MathReadServiceImpl extends ReadService {
@Override
public void read() {
System.out.println("2. 读数学");
}
}
public class Test {
public static void main(String[] args) {
List<ReadService> list=new ArrayList<>();
list.add(new WordReadSeviceImpl());
list.add(new MathReadServiceImpl());
//对列表进行排序
AnnotationAwareOrderComparator.sort(list);
list.forEach(ReadService::read);
}
}
网友评论