首页 > 代码库 > Spring中控制实现同一个接口的实现类在List中调用的顺序

Spring中控制实现同一个接口的实现类在List中调用的顺序

        由于在更新Redis缓存的时候,每个service都实现了基本的RedisCacheUpdate接口里面的update函数,在定时任务里面,采用List<RedisCacheUpdate>的方式批量调用update,但是service之间也有缓存依赖,比如service B依赖service A的缓存,这样,如果B先update那么就会取不到缓存数据而每次在数据库中取,很浪费时间,所以需要控制A , B 在List中被注入的顺序,那么问题来,来了,该怎么控制他们的调用顺序呢?
        Spring早就为我们提供了解决方案,只要在每个实现类加注解Order就可以主动改变他们的注入顺序,这里采用的Spring版本是4.0.8-RELEASE。
        Test一下,果然按照给定的顺序来注入了,十分方面。


Interface Base{
void print();
}

@Component
@Order(3)
class A implements Base{

     void print(){
          syso("A");
     }
}
@Component
@Order(2)
class B implements Base{

     void print(){
          syso("B");
     }
}
@Component
@Order(1)
class C implements Base{

     void print(){
          syso("C");
     }
}
@Component
class InvokerClass{
     @Autowired
     List<Base> list;

     void print(){
          for(Base base: list){
               base.print();
          }
     }
}

public class Main{

     public static void main (String[] args){
          ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:spring.xml");
          InvokerClass in = context.getBean(InvokerClass.class);
          in.print();
     }

打印的结果:
C
B
这里面主要是使用了@Order注解,给注解赋值根据值的大小决定调用的优先级,越大优先级越低。
这样就完全改变了Bean的调用顺序。
就可以控制他们的先后顺序。

Spring中控制实现同一个接口的实现类在List中调用的顺序