码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-12-30 20:43:34      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:spring   order   redis   spring注入顺序   

        由于在更新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中调用的顺序

标签:spring   order   redis   spring注入顺序   

原文地址:http://blog.csdn.net/jackieyzw/article/details/42270535

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!