首页 > 代码库 > 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一下,果然按照给定的顺序来注入了,十分方面。
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();
}
打印的结果:CBA这里面主要是使用了@Order注解,给注解赋值根据值的大小决定调用的优先级,越大优先级越低。这样就完全改变了Bean的调用顺序。就可以控制他们的先后顺序。
Spring中控制实现同一个接口的实现类在List中调用的顺序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。