文章目录

  • 1. 前言
  • 2. 代码实现

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

Spring 使用注解@DependsOn控制Bean加载顺序相关推荐

  1. Spring控制Bean加载顺序

    spring容器载入bean顺序是不确定的,spring框架没有约定特定顺序逻辑规范. 首先要了解depends-on或@DependsOn作用,是用来表示一个bean A的实例化依赖另一个bean ...

  2. 使用 加载 顺序_SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣

    在网上查询 Bean 的加载顺序时,看到了大量的文章中使用@Order注解的方式来控制 bean 的加载顺序,不知道写这些的博文的同学自己有没有实际的验证过,本文希望通过指出这些错误的使用姿势,让观文 ...

  3. S2JH经验分享:控制jdbc:initialize-database与其他bean加载顺序

    为什么80%的码农都做不了架构师?>>>    为了便于干净的初始化部署运行S2JH框架,采用了jdbc:initialize-database来从SQL脚本中初始化框架基础数据,其 ...

  4. Spring源码分析:Bean加载流程概览及配置文件读取

    很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事的都是Java Web的工作,对于程序员来说,一个Web项目用到Spring,只是配置一下配置文件而已 ...

  5. Spring使用环境变量控制配置文件加载(转)

    项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...

  6. 【Spring源码分析】Bean加载流程概览

    代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事 ...

  7. beaninfo详解源码解析 java_【Spring源码分析】Bean加载流程概览

    代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事 ...

  8. SpringBoot Bean加载顺序 Order无效

    @Bean@Order(1)public xxx1 createXxx1() {return new xxx1();}@Bean@Order(2)public xxx2 createXxx2() {r ...

  9. spring技巧之bean加载顺序控制

    spring技巧之bean加载顺序控制 前言 误区 疑问 思路 关键代码示例 前言 某些时候,我们想要控制bean的加载顺序,比如某些资源配置类的bean需要在其他的bean之前被加载,以便其他bea ...

最新文章

  1. 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现4
  2. org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in r...
  3. Anaconda 安装 opencv3(Win10)
  4. 【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )
  5. Android 拍照是开启(调用)闪光灯(原创)
  6. 查看Centos7系统参数和机器参数
  7. 网络基础、多线程、ftp任务铺垫
  8. 【零基础学Java】—重写(二十)
  9. 《Android 第1行代码》读后感—第15章【最后一步——将应用发布到360应用商店】
  10. 好用的蓝牙管理工具推荐,帮您优雅管理蓝牙功能!
  11. cat6 万兆_专业扫盲Cat5e/Cat6/Cat6a/Cat7网线系列
  12. openGL之API学习(一四七)实时渲染、光线追踪渲染和栅格化渲染
  13. 计算机用户中的配置文件,我的电脑的用户配置文件中多了一个未知的帐户 – 手机爱问...
  14. Matlab利用gca设置图像属性(线型,字号,颜色)
  15. 研究生学术道德考试 部分题目 Word可搜索版
  16. 微小宝公众号排行榜_微小说免费阅读网公众号大全推荐资源网
  17. Jetson Nano安装ROS错误合集
  18. c++中的 单引号和双引号
  19. jmeter——jmeter+ant生成优化的HTML接口自动化测试报告
  20. uniapp Android11及以上系统的手机需要使用FileProvider方式分享

热门文章

  1. SAP中过账码or记账码posting code
  2. SAP SD销售收入科目确定VKOA
  3. abap--关于sap地址,传真,邮箱的地址读取
  4. 关于SAP的“Sort key 排序码”
  5. ABAP日期操作函数
  6. 不安全的食品,如何“安全地”上了货架?
  7. 注定一爆就完的ZAO ,为什么只是一剂社交毒药?
  8. 计算机网络信息安全的含义,计算机网络信息安全内涵及其重要性
  9. 简易计算器 (C语言)作业
  10. 计算机猜数游戏matlab,MATLAB课程设计报告猜数游戏设计