CommandLineRunner 和 InitializingBean初始化

news/2024/12/20 5:57:32/

CommandLineRunner 和 InitializingBean 都是 Spring 框架中用于初始化 Bean 的机制,但它们有不同的使用场景和特点。

CommandLineRunner

作用: CommandLineRunner 是一个接口,它定义了一个方法 run(String... args),这个方法会在 Spring Boot 应用启动后自动调用。你可以通过实现这个接口或者使用 @Component 注解来声明一个类,并在这个类中实现 run 方法。这样,当应用启动时,run 方法就会被执行。

应用场景:

  • 在应用启动时执行一些初始化操作,例如读取配置文件、初始化数据等。
  • 执行一些一次性任务,比如导入初始数据到数据库。
  • 运行一些命令行工具或者脚本。

示例代码:

java">import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Component
public class MyCommandLineRunner implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("Application is starting up...");// 在这里添加你的初始化代码}
}

 InitializingBean

作用: InitializingBean 是一个接口,它定义了一个方法 afterPropertiesSet(),这个方法在所有属性都被设置之后被调用。与 CommandLineRunner 不同的是,InitializingBean 的生命周期是在 Spring 容器完成属性注入之后触发的,而 CommandLineRunner 是在 Spring Boot 应用启动后触发的。

应用场景:

  • 在所有依赖项都注入完毕之后执行一些初始化操作。
  • 需要在所有属性设置完成后执行某些特定的操作。

示例代码:

java">import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;@Component
public class MyInitializingBean implements InitializingBean {@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("All properties are set now...");// 在这里添加你的初始化代码}
}

区别

  1. 调用时机:

    • CommandLineRunner 在应用启动后调用。
    • InitializingBean 在所有属性注入完成后调用。
  2. 适用场景:

    • CommandLineRunner 适用于需要在应用启动时执行的操作。
    • InitializingBean 适用于需要在所有依赖项都注入完毕之后执行的操作。
  3. 灵活性:

    • CommandLineRunner 可以接收命令行参数。
    • InitializingBean 只有 afterPropertiesSet() 方法。

总结来说,CommandLineRunner 更适合在应用启动时执行一些操作,而 InitializingBean 更适合在所有属性都注入完毕之后执行一些初始化操作。两者的选择取决于你的具体需求。


http://www.ppmy.cn/news/1556582.html

相关文章

114. 二叉树展开为链表(java)标记一下

题目描述: 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序…

【系统】Mac crontab 无法退出编辑模式问题

【系统】Mac crontab 无法退出编辑模式问题 背景一、问题回答1.定位原因:2.确认编辑器类型3.确保编辑器进入正确3.1 确认是否有crontab调度任务3.2 进入编辑器并确保编辑器正常3.3 保存操作 4.确认crontab任务存在5.确保脚本的可执行性和正确性 二、后续 背景 之前…

Arrays工具类——常用方法

Arrays工具类 它是Java API文档已经给我们提供好的一个现成类,对于我们来说直接使用即可 在以后开发过程中,就2种情况: 1.自己写类,自己写方法,自己写实现……【累】 2.别人已经给你写好了,直接拿过来用就…

嵌入式单片机中对应GPIO外设详解实现

一、GPIO外设详解 大家可以看到,函数库开发的时候外设的使用流程都是一样的,接下来就讲解一下细节。 l定义一个外设的结构体变量 变量命名规则 PPP_InitTypeDef PPP_InitStructure; 每个外设都有对应的结构体,结构体的定义一般都是存放在每个外设的头文件内,比如GPIO外…

杨振宁大学物理视频中黄色的字,c#写程序去掉(原版改进,三)

上一节,我们分清了主次矛盾,并搞定了主要矛盾(去掉黄色的字),这一节解决次要矛盾(矩形色带)。 我们的想法如图: 1,我们找到稳定黄色的最左边,最右边两点&…

CentOS7超详细安装教程

资料提供 VMware虚拟机下载 通过百度网盘分享的文件:VMware-workstation-full-17.5.2 个人免费... 链接:百度网盘 请输入提取码 提取码:6666 CentOS7镜像 镜像下载网址centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 选择图下版本即…

AI前沿测评:Kimi上线视觉思考k1模型,多模态更上一层楼?

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、Kimi k1 背后的技术创新二、Kimi k1:技术迭代与升级三、Kimi k1 的实际应用场景四、Kimi k1…

glTF格式:WebGL应用的3D资产优化解决方案

摘要 glTF作为一种高效的3D资产格式,为WebGL、OpenGL ES和OpenGL运行时的应用提供了强有力的支持。它不仅简化了3D模型的传输与加载流程,还通过优化资产大小,使得打包、解包更加便捷。本文将深入探讨glTF格式的优势,并提供实用的代…