Spring如何使用注解@DependsOn控制Bean加载顺序

 更新时间:2025年06月20日 15:37:04   作者:°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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java实现对map的字典序排序操作示例

    java实现对map的字典序排序操作示例

    这篇文章主要介绍了java实现对map的字典序排序操作,结合实例形式分析了java参照微信官网算法实现的字典序排序操作相关实现技巧,需要的朋友可以参考下
    2019-07-07
  • Java EasyExcel实现导出多sheet并设置单元格样式

    Java EasyExcel实现导出多sheet并设置单元格样式

    EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具,下面我们就来学习一下EasyExcel如何实现导出多sheet并设置单元格样式吧
    2023-11-11
  • Spring 中 PageHelper 不生效问题及解决方法

    Spring 中 PageHelper 不生效问题及解决方法

    这篇文章主要介绍了Spring 中 PageHelper 不生效问题,使用这个插件时要注意版本的问题,不同的版本可能 PageHelper 不会生效,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Java 实现实时监听文件夹是否有新文件增加并上传服务器功能

    Java 实现实时监听文件夹是否有新文件增加并上传服务器功能

    本文中主要陈述一种实时监听文件夹中是否有文件增加的功能,可用于实际文件上传功能的开发。本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-09-09
  • Java中接口的深入详解

    Java中接口的深入详解

    在Java语言中,接口由类来实现以便使用接口中的方法,这篇文章主要给大家介绍了关于Java中接口的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • springboot 如何解决cross跨域请求的问题

    springboot 如何解决cross跨域请求的问题

    这篇文章主要介绍了springboot 如何解决cross跨域请求的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java实现游戏抽奖算法

    Java实现游戏抽奖算法

    这篇文章主要为大家详细介绍了Java实现游戏抽奖算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • IDEA Maven源修改为国内阿里云镜像的正确方式

    IDEA Maven源修改为国内阿里云镜像的正确方式

    为了加快 Maven 依赖的下载速度,可以将 Maven 的中央仓库源修改为国内的镜像,比如阿里云镜像,以下是如何在 IntelliJ IDEA 中将 Maven 源修改为阿里云镜像的详细步骤,感兴趣的同学可以参考阅读一下
    2024-09-09
  • 如何使用JAVA调用SHELL

    如何使用JAVA调用SHELL

    这篇文章主要介绍了如何使用JAVA调用SHELL,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Java内部类详解

    Java内部类详解

    内部类在 Java 里面算是非常常见的一个功能了,在日常开发中我们肯定多多少少都用过,这里总结一下关于 Java 中内部类的相关知识点和一些使用内部类时需要注意的点。
    2020-02-02

最新评论