由于在更新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 A 这里面主要是使用了@Order注解,给注解赋值根据值的大小决定调用的优先级,越大优先级越低。 这样就完全改变了Bean的调用顺序。 就可以控制他们的先后顺序。