JAVA基础篇(17)—ordered接口和order注解

2020-05-07  本文已影响0人  小胖学编程

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);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读