Spring 使用注解@DependsOn控制Bean加载顺序
文章目录
- 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加载顺序相关推荐
- Spring控制Bean加载顺序
spring容器载入bean顺序是不确定的,spring框架没有约定特定顺序逻辑规范. 首先要了解depends-on或@DependsOn作用,是用来表示一个bean A的实例化依赖另一个bean ...
- 使用 加载 顺序_SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣
在网上查询 Bean 的加载顺序时,看到了大量的文章中使用@Order注解的方式来控制 bean 的加载顺序,不知道写这些的博文的同学自己有没有实际的验证过,本文希望通过指出这些错误的使用姿势,让观文 ...
- S2JH经验分享:控制jdbc:initialize-database与其他bean加载顺序
为什么80%的码农都做不了架构师?>>> 为了便于干净的初始化部署运行S2JH框架,采用了jdbc:initialize-database来从SQL脚本中初始化框架基础数据,其 ...
- Spring源码分析:Bean加载流程概览及配置文件读取
很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事的都是Java Web的工作,对于程序员来说,一个Web项目用到Spring,只是配置一下配置文件而已 ...
- Spring使用环境变量控制配置文件加载(转)
项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...
- 【Spring源码分析】Bean加载流程概览
代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事 ...
- beaninfo详解源码解析 java_【Spring源码分析】Bean加载流程概览
代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事 ...
- SpringBoot Bean加载顺序 Order无效
@Bean@Order(1)public xxx1 createXxx1() {return new xxx1();}@Bean@Order(2)public xxx2 createXxx2() {r ...
- spring技巧之bean加载顺序控制
spring技巧之bean加载顺序控制 前言 误区 疑问 思路 关键代码示例 前言 某些时候,我们想要控制bean的加载顺序,比如某些资源配置类的bean需要在其他的bean之前被加载,以便其他bea ...
最新文章
- 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现4
- org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in r...
- Anaconda 安装 opencv3(Win10)
- 【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )
- Android 拍照是开启(调用)闪光灯(原创)
- 查看Centos7系统参数和机器参数
- 网络基础、多线程、ftp任务铺垫
- 【零基础学Java】—重写(二十)
- 《Android 第1行代码》读后感—第15章【最后一步——将应用发布到360应用商店】
- 好用的蓝牙管理工具推荐,帮您优雅管理蓝牙功能!
- cat6 万兆_专业扫盲Cat5e/Cat6/Cat6a/Cat7网线系列
- openGL之API学习(一四七)实时渲染、光线追踪渲染和栅格化渲染
- 计算机用户中的配置文件,我的电脑的用户配置文件中多了一个未知的帐户 – 手机爱问...
- Matlab利用gca设置图像属性(线型,字号,颜色)
- 研究生学术道德考试 部分题目 Word可搜索版
- 微小宝公众号排行榜_微小说免费阅读网公众号大全推荐资源网
- Jetson Nano安装ROS错误合集
- c++中的 单引号和双引号
- jmeter——jmeter+ant生成优化的HTML接口自动化测试报告
- uniapp Android11及以上系统的手机需要使用FileProvider方式分享