春天的核心接口之命令

  

一、有序接口介绍
春天中提供了一个有序的接口。从单词意思就知道命令接口的作用就是用来排序的。
春框架是一个大量使用策略设计模式的框架,这意味着有很多相同接口的实现类,那么必定会有优先级的问题。于是春天就提供了命令这个接口,来处理相同接口实现类的优先级问题。

  

二,下令接口分析
1,下令接口的定义:

  
 <代码>公共接口命令{/* * *的有用常量最高优先级的值。
  * @see java.lang.Integer # MIN_VALUE
  */int HIGHEST_PRECEDENCE=Integer.MIN_VALUE;/* *
  *的有用常量最低优先级值。
  * @see java.lang.Integer # MAX_VALUE
  */int LOWEST_PRECEDENCE=Integer.MAX_VALUE;/* *
  *获得该对象的秩序价值。
  * & lt; p>高值解释为低优先级。因此,
  *最低的对象有最高优先级(有点价值
  *类似于Servlet {@code load-on-startup}值)。
  * & lt; p>同样的顺序值将导致任意位置的排序
  *受影响的对象。
  * @return顺序的值
  * @see # HIGHEST_PRECEDENCE
  * @see # LOWEST_PRECEDENCE
  */int getOrder();  
  

}   

该接口卡只有1个方法getOrder()及2个变量HIGHEST_PRECEDENCE最高级(数值最小)和LOWEST_PRECEDENCE最低级(数值最大)。

  

2, OrderComparator类:实现了比较器接口的一个比较器。

  
 <代码>公共类OrderComparator实现Comparator{/* *
  *共享OrderComparator的默认实例。
  */公共静态最终OrderComparator实例=new OrderComparator ();
  
  公共int比较(o1,对象o2) {
  布尔p1=(o1 instanceof PriorityOrdered);
  布尔p2=(o2 instanceof PriorityOrdered);
  如果(p1,,! p2) {
  返回1;
  }
  else if (p2,,! p1) {
  返回1;
  }//直接评价而不是Integer.compareTo避免不必要的对象创建。
  int i1=getOrder (o1群);
  int i2=getOrder (o2);
  返回(i1 & lt;i2) ?1:(i1比;i2) ?1: 0;
  }/* *
  *确定给定对象的值。
  * & lt; p>默认实现检查反对{@link下令}
  *接口。可以在子类中覆盖。
  * @param obj检查的对象
  * @return订单价值,或{@code命令。LOWEST_PRECEDENCE}作为候选
  */保护int getOrder(对象obj) {
  返回(obj instanceof命令?((命令)obj) .getOrder (): Ordered.LOWEST_PRECEDENCE);
  }/* *
  *与默认OrderComparator给定的列表。
  * & lt; p>优化跳过排序的列表大小0或1,
  *为了避免不必要的数组提取。
  * @param列表排序列表
  * @see java.util.Collections # (java.util排序。列表,java.util.Comparator)
  */公共静态孔隙类型(List<?比;列表){
  如果(list.size()在1){
  集合。排序(列表、实例);
  }
  }/* *
  *与默认OrderComparator给定的数组。
  * & lt; p>优化跳过排序的列表大小0或1,
  *为了避免不必要的数组提取。
  * @param数组的数组排序
  * @see java.util。数组排序号(Object [], java.util.Comparator)
  */公共静态孔隙类型(Object[]数组){
  如果数组。长度比;1){
  数组。排序(数组、实例);
  }
  }
  } 
  

提供了2个静态排序方法:sort (List<?比;列表)用来排序集列表合,排序(Object[]数组)用来排数序对象组
可以下OrderComparator类的公共int比较(o1,对象o2)方法,可以看到另外一个类PriorityOrdered,这个方法的逻辑解析如下:

  
      <李>若对象o1群是下令接口类型,o2是PriorityOrdered接口类型,那么o2的优先级高于o1李   <李>若对象o1群是PriorityOrdered接口类型,o2是下令接口类型,那么o1的优先级高于o2李   <李>其他情况,若两者都是要求接口类型或两者都是PriorityOrdered接口类型,调用命令接口的getOrder方法得值到订单,订单值越大,优先级越小
    简单来说就是:
    OrderComparator比较器进行排序的时候,若2个对象中有一个对象实现了PriorityOrdered接口,那么这个对象的优先级更高。若2个对象都是PriorityOrdered或命令接口的实现类,那么比较有序接口的getOrder方法得到订单值,值越低,优先级越高。   
  

三,春天中使用命令接口在的例子
在春天配置文件中添加:& lt; mvc:注解驱动/祝辞,那么SpringMVC默认会注入RequestMappingHandlerAdapter和RequestMappingHandlerMapping这两个类,既然SpringMVC已经默认为我们注入了RequestMappingHandlerAdapter和RequestMappingHandlerMapping这两个类,如果再次配置这两个类,将会出现什么效果呢?
当我们配置了注解驱动以及这两个bean的时候.Spring容器就有了2个RequestMappingHandlerAdapter和2个RequestMappingHandlerMapping。

春天的核心接口之命令

Copyright © 2020-2023 feiqueyun.cn. All Rights Reserved. 肥雀云_南京肥雀信息技术有限公司版权所有 南京肥雀信息技术有限公司 苏ICP备16063723号-5