SpringBoot - @PostConstruct、InitializingBean、 ApplicationRunner 和 CommandLineRunner的执行顺序

2023-12-16

写在前面
在实际开发场景中,经常会遇到数据初始化的业务场景,那么如何在Spring容器启动时执行相关操作呢?比如:读取配置文件,数据库连接,数据缓存,数据预计算…
可以使用:@PostConstruct、InitializingBean、 ApplicationRunner 和 CommandLineRunner来完成。

SpringBoot - @PostConstruct 注解详解
SpringBoot - ApplicationRunner的作用是什么?
SpringBoot - InitializingBean的作用是什么?

测试示例
@Component
public class MyInitializingBean implements InitializingBean, CommandLineRunner, ApplicationRunner {
@PostConstruct
public void init() {
System.out.println("1. 执行@PostConstruct注解的方法 - init()...");
}


@Override
public void afterPropertiesSet() throws Exception {
System.out.println("2. 执行实现InitializingBean接口的方法 - afterPropertiesSet()...");
}

@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("3. 执行实现ApplicationRunner接口的方法 - run(ApplicationArguments args)...");

}

@Override
public void run(String... args) throws Exception {
System.out.println("4. 执行实现CommandLineRunner接口的方法 - run(String... args)...");
}
}

// 输出结果如下:

1. 执行@PostConstruct注解的方法 - init()...
2. 执行实现InitializingBean接口的方法 - afterPropertiesSet()...
3. 执行实现ApplicationRunner接口的方法 - run(ApplicationArguments args)...
4. 执行实现CommandLineRunner接口的方法 - run(String... args)...

区别描述
A. 如果需要在容器启动后进行一些初始化操作,可以使用由SpringBoot提供的ApplicationRunner/CommandLineRunner;
B. 如果需要在一个类加载的时候进行一个初始化的操作,可以选择由JDK提供的@PostConstruct注解进行一个初始化的操作。另:@PostConstruct可以在容器没有完全启动的情况下能够进行初始化操作,而ApplicationRunner/CommandLineRunner的初始化一定是在容器完全启动之后执行的。@PostConstruct这个注解是针对BEAN的初始化完成之后再做一些事情,比如注册一些监听器、配置文件的初始化等等;
C. 由Spring提供的InitializingBean用法与@PostConstruct基本一致,但是相应的BEAN需要实现afterPropertiesSet()方法;

定义来源
名称    来源
ApplicationRunner    Spring Boot
CommandLineRunner    Spring Boot
InitializingBean    Spring
@PostConstruct    JDK
执行顺序
@PostConstruct > InitializingBean > ApplicationRunner > CommandLineRunner

源码、示例及DEMO
源码、示例及DEMO


————————————————
版权声明:本文为CSDN博主「cloneme01」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/goodjava2007/article/details/126356908

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot - @PostConstruct、InitializingBean、 ApplicationRunner 和 CommandLineRunner的执行顺序 的相关文章

随机推荐

  • 《optisystem案例解析》好书分享

    目 录 安装OptiSystem 简介 快速入门 案例1 发射机 外调制激光 案例2 子系统 分层模拟 案例3 光学系统 WDM设计 案例4 参数扫描 BERx输入功率 案例5 双向模拟 使用多次迭代 案例6 时间驱动模拟 单独采样 案例7
  • CASAIM与广州大学达成冲击力分析检测合作,基于高精度3D测量技术探究不同厚度金属板材受力变形情况

    近期 CASAIM与广州大学达成冲击力分析检测合作 基于高精度3D测量技术探究不同厚度金属板材受力变形状态和受力分布 广州大学有着90多年的办学传统 紧紧抓住国家 双一流 建设 广东省和广州市高水平大学建设机遇 坚持 四个面向 深化与广州和
  • 杂散光好书分享《FRED操作手册上、下》

    目 录 第一章 FRED概述 1 1 1 WHAT IS FRED 1 1 2 FRED与传统软件之间有什么不同 1 1 3 FRED名词术语 2 1 4 FRED用户界面 7 第二章 光源 16 2 1 简易光源 16 2 1 1 简易光
  • 平面电磁波散射中麦克斯韦方程组的米氏解

    摘要 平面波对于任意半径和折射率的球形粒子的吸收和散射问题 米氏解是严格的麦克斯韦求解器 其得到的散射效应十分依赖于粒子的大小 根据其特性 散射可以分为瑞利散射 米氏散射和几何光学散射 VirtualLab Fusion中包含了完整的米氏解
  • 杂散光好书分享《FRED操作手册上、下》

    目 录 第一章 FRED概述 1 1 1 WHAT IS FRED 1 1 2 FRED与传统软件之间有什么不同 1 1 3 FRED名词术语 2 1 4 FRED用户界面 7 第二章 光源 16 2 1 简易光源 16 2 1 1 简易光
  • 二维周期光栅结构的配置

    摘要 复杂光学光栅结构被广泛用于多种应用 如光谱仪 近眼显示系统等 利用傅里叶模态法 FMM 或称RCWA VirtualLab Fusion 提供了一种用于任意光栅结构严格分析的简单方法 利用图形用户界面 用户可以设置堆栈的几何形状 从而
  • 《VirtualLab Fusion物理光学实验教程》好书分享

    目录 第一章 物理光学概念介绍 6 1 1 几何光学和光线追迹 6 1 2 物理光学和光场追迹 6 1 3 电场 磁场以及坡印廷矢量 8 1 4 振幅 相位及实部和虚部 9 1 5 振幅 相位与偏振 10 1 6菲涅尔公式 11 1 7 全
  • ADB:常用指令汇总

    常用指令
  • 用与球形粒子散射的MIE解

    光的散射是最基本的光效应之一 对于大小与光的波长相当的散射粒子 例如空气中的液滴或气态污染物 需要进行精确的处理才能建立足够精确的模型 米氏解 也称为洛伦兹 米氏解 或米氏散射 已在VirtualLab Fusion中用于研究球形粒子的散射
  • Python:用python脚本,自动翻阅Andriod手机小说

    一 需求描述 在 Windows10 环境下 通过 Python 脚本 实现自动翻阅 Andriod 手机上的小说 二 安装adb 下载地址 ADB官网 下载后 直接解压即可 然后 配置 adb 的环境变量 查看 adb 版本 adb ve
  • Markdown编辑器使用笔记

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适
  • 字节内网被催更的漫画:实习四个月,我的真实体验!

    小米前端日常实习 拼多多 非必要就别去了吧 一个985废物的春招诈骗史 秋招总结 逃离互联网哩 苹果公司嵌入式工程师面经 offer选择 拒了华为 重回0 offer 解约的同学看过来 提供一份解约思路 每人进来骂一句 我就能改简历改到死
  • 开发者都能玩转的大模型训练

    本篇文章授权活动官方亚马逊云科技文章转发 改写权 包括不限于在 亚马逊云科技开发者社区 知乎 自媒体平台 第三方开发者媒体等亚马逊云科技官方渠道 目录 前言 概念基础 原理核心 入手体验 体验收获 结束语 参考文献 前言 看了刚结束的亚马逊
  • GitHub Universe 2023 Watch Party in Shanghai:开源开发者日盛会

    目录 前言 GitHub Universe 2023的背景 开源开发者日活动亮点 本次参会的意义 活动日程 最后 前言 作为全球最大的代码托管平台 GitHub每年都会举办一场令开源开发者们翘首以待的盛会 GitHub Universe 今
  • Vue:监视属性功能实现

    一 普通监视 基础案例代码片段 这里 主要是监视 isHot 变量的变化 const vm new Vue el root data isHot true computed info return this isHot 炎热 凉爽 meth
  • 电磁场与纳米圆柱体的相互作用

    摘要 电磁场和光的波长尺度的纳米结构的相互作用必须使用严格的Maxwell求解器进行研究 通过将完美匹配层 PML 技术与傅立叶模态方法 FMM 相结合 可以在VirtualLab Fusion中对非周期性纳米结构进行建模 本示例研究了聚焦
  • 实践!在Spring Boot启动时添加方法运行,一文全懂!

    Springboot最佳实践 在Spring Boot启动时添加方法运行 在开发Spring Boot应用程序时 有时我们需要在启动时运行方法或一段代码 这段代码可以是任何内容 从记录某些信息到设置数据库 cron作业等 我们不能仅将此代码
  • 《OptiBPM入门教程》好书分享

    目 录 1 入门指南 1 1 OptiBPM安装及说明 1 2 OptiBPM简介 1 3 光波导介绍 1 4 快速入门 2 创建一个简单的MMI耦合器 2 1 定义MMI耦合器材料 2 2 定义布局设置 2 3 创建一个MMI耦合器 2
  • 腾讯云HAI:人人都可无门槛AI作画!

    目录 前言 关于HAI HAI优势 开启HAI使用 清理资源 体验心得 结束语 参考文献 前言 随着科技的不断进步和数据驱动的时代到来 越来越多的开发者和数据研究人员需要强大的计算能力来支持他们的工作 尤其是在处理大规模数据 进行机器学习和
  • SpringBoot - @PostConstruct、InitializingBean、 ApplicationRunner 和 CommandLineRunner的执行顺序

    写在前面 在实际开发场景中 经常会遇到数据初始化的业务场景 那么如何在Spring容器启动时执行相关操作呢 比如 读取配置文件 数据库连接 数据缓存 数据预计算 可以使用 PostConstruct InitializingBean App