欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > CommandLineRunner 和 InitializingBean初始化

CommandLineRunner 和 InitializingBean初始化

2025/9/16 7:51:58 来源:https://blog.csdn.net/m0_61716416/article/details/144580502  浏览:    关键词:CommandLineRunner 和 InitializingBean初始化

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

CommandLineRunner

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

应用场景:

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

示例代码:

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 应用启动后触发的。

应用场景:

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

示例代码:

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 更适合在所有属性都注入完毕之后执行一些初始化操作。两者的选择取决于你的具体需求。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词