本文主要是介绍Spring如何使用注解@DependsOn控制Bean加载顺序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍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 valueandroid){ cache.put(key, value); } China编程}
创建 C 类,并在构造函数读取 MyCache:
@Component public class C { public C(){ System.outphp.pjavascriptrintln("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
总结
这篇关于Spring如何使用注解@DependsOn控制Bean加载顺序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!