Spring如何使用注解@DependsOn控制Bean加载顺序
作者:°Fuhb
这篇文章主要介绍了Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
1. 前言
默认情况下,Spring加载Bean的顺序是不确定的(或者可以理解为,按编译后的class文件顺序加载)。当我们需要控制Bean加载顺序以满足特定的需求时,@DependsOn就派上用场了。
假设需求场景:
C类加载时要从缓存读取数据,D类加载时会初始化缓存数据。因此,我们必须控制D类优先加载,否则C读到的缓存会是空的。
2. 代码实现
先验证没有加 @DependsOn 的效果
创建缓存类 MyCache
public class MyCache { private static Map<String, Object> cache = new HashMap<>(); public static Object get(String key){ return cache.get(key); } public static void set(String key, Object value){ cache.put(key, value); } }
创建 C 类,并在构造函数读取 MyCache:
@Component public class C { public C(){ System.out.println("name:" + MyCache.get("name")); } }
创建 D 类,并在构造函数初始化 MyCache:
@Component public class D { public D(){ MyCache.set("name", "fuhb"); } }
启动程序,这时会输出空的数据:
name:null
这明显不符合我们的需求,因此修改 C 类,增加 @DependsOn 注解
@Component @DependsOn(value = { "d" }) public class C { public C(){ System.out.println("name:" + MyCache.get("name")); } }
重新启动程序,正常读取了MyCache的数据,说明D优先于C加载
name:fuhb
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。