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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java EasyExcel实现导出多sheet并设置单元格样式
EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具,下面我们就来学习一下EasyExcel如何实现导出多sheet并设置单元格样式吧2023-11-11
Spring 中 PageHelper 不生效问题及解决方法
这篇文章主要介绍了Spring 中 PageHelper 不生效问题,使用这个插件时要注意版本的问题,不同的版本可能 PageHelper 不会生效,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下2022-12-12
Java 实现实时监听文件夹是否有新文件增加并上传服务器功能
本文中主要陈述一种实时监听文件夹中是否有文件增加的功能,可用于实际文件上传功能的开发。本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧2019-09-09


最新评论