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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论