【SpringBoot】 启动后执行方法的五种方式

这篇具有很好参考价值的文章主要介绍了【SpringBoot】 启动后执行方法的五种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 SpringBoot 工程 启动后, 执行方法的五种方式:

1、实现 CommandLineRunner 接口

项目初始化完毕后,才会调用方法,提供服务

@Component
public class StartInit2 implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("CommandLineRunner====================");
    }
}

2、实现 ApplicationRunner 接口

同 CommandLineRunner。只是传参格式不一样。CommandLineRunner:没有任何限制;ApplicationRunner:key-value

@Component
public class StartInit3 implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) {
        System.out.println("ApplicationRunner=================");
    }
}

3、实现 ApplicationListener 接口

项目初始化完毕后,才会调用方法,提供服务。注意监听的事件,通常是 ApplicationStartedEvent 或者 ApplicationReadyEvent,其他的事件可能无法注入 bean。

@Component
public class StartInit4 implements ApplicationListener<ApplicationStartedEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        System.out.println("ApplicationListener================ApplicationStartedEvent");
    }
}
  • 如果监听的是 ApplicationStartedEvent 事件,则 ApplicationListener 一定会在 CommandLineRunner 和 ApplicationRunner 之前执行;
  • 如果监听的是 ApplicationReadyEvent 事件,则 ApplicationListener 一定会在 CommandLineRunner 和 ApplicationRunner 之后执行;

顺序:
默认是 ApplicationRunner 先执行,如果双方指定了@Order 则按照 @Order的大小顺序执行,小的先执行。

原理:

  1. SpringApplication 的run方法会执行afterRefresh方法。
  2. afterRefresh方法会执行callRunners方法。
  3. callRunners方法会调用所有实现ApplicationRunner和CommondLineRunner接口的方法callRunners方法会调用所有实现ApplicationRunner和CommondLineRunner接口的方法

4、@PostConstruct 注解

在项目初始化过程中,就会调用此方法。如果业务逻辑执行很耗时,可能会导致项目启动失败。

@Component
public class StartInit {

    @PostConstruct
    public void init() {
        System.out.println("@PostConstruct===============================");
    }

}

5、实现 InitializingBean 接口

项目启动时,调用此方法文章来源地址https://www.toymoban.com/news/detail-404064.html

@Component
public class StartInit6 implements InitializingBean {

    @Override
    public void afterPropertiesSet() {
        System.out.println("InitializingBean====================");
    }

}

到了这里,关于【SpringBoot】 启动后执行方法的五种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详谈SpringBoot启动项目后执行自定义方法的方式

    这个是在所有启动后执行,也是常用之一。 项目初始化完毕后才会调用方法,提供服务。好处是方法执行时,项目已经初始化完毕,是可以正常提供服务的。 实现 ApplicationRunner 接口和实现 CommandLineRunner 接口基本是一样的。不同的是启动时传参的格式,CommandLineRunner 对于参数

    2024年02月10日
    浏览(37)
  • 多线程的五种“打开”方式

    线程(Thread)是计算机科学中的一个基本概念,它是进程(Process)中的一个执行单元,负责执行程序的指令序列。 线程是操作系统能够进行调度和执行的最小单位。 在多任务操作系统中,多个线程可以在同一个进程内并发执行,共享进程的资源。 { 假设你正在厨房中准备晚

    2024年02月10日
    浏览(36)
  • PHP的五种运行方式

    PHP的五种运行方式: 1、命令行方式:通过在 命令行终端中输入 php 命令 ,可以执行PHP脚本文件。这种方式常用于执行独立的PHP脚本,比如执行一些批处理任务、定时任务等。 优点:灵活方便,可用于执行独立的PHP脚本,适合批处理任务和定时任务。 缺点:需要手动在命令

    2024年02月05日
    浏览(54)
  • 微前端:qiankun的五种通信方式

    今天盘点一下 qiankun 父子应用的通信方式都有哪些,我发现了 5 种。 1、localStorage/sessionStorage 2、通过路由参数共享 3、官方提供的 props 4、官方提供的 actions 5、使用vuex或redux管理状态,通过shared分享 接下来我们一个一个进行说明 有人说这个方案必须主应用和子应用是同一个

    2024年03月21日
    浏览(48)
  • List集合的五种遍历方式

    目录 一、List五种遍历方式  1、普通for遍历 2、 增强for遍历  3、Lambda表达式  4、迭代器遍历  5、列表迭代器 方法 说明 迭代器遍历 在遍历的过程中需要删除元素,请使用迭代器。 列表迭代器 在遍历的过程中需要添加元素,请使用列表迭代器。 增强for遍历 仅仅想遍历,那

    2024年02月10日
    浏览(43)
  • Java遍历Map的五种方式

    java中遍历map一般有五种方法,从最早的Iterator,到java5支持的foreach,再到java8的Lambda表达式。 如果只是获取key,或者value,推荐使用keySet或者values方式 如果同时需要key或者value推荐使用entrySet 如果需要在遍历过程中删除元素推荐使用Iterator 如果需要在遍历过程中增加元素,可

    2024年02月03日
    浏览(53)
  • 温故知新—Activity的五种启动模式

    这两天遇到了一个 bug ,说是应用打开一个二级页面,然后直接回到桌面,并不是杀掉应用,只是回到桌面,再次打开的时候没有回到那个二级页面,而是回到了首页。 看到这里,很多人大概都知道是什么原因了,没错,就是 Activity 的启动模式设置为了 singleTask 而导致的问题

    2024年02月09日
    浏览(50)
  • 微信小程序传参的五种方式

    大家好,今天和大家分享一下微信小程序页面之间传参的五种方式,这个的话也是有人问了我一嘴,然后现在我和大家分享一下。 使用GPT搜索的话给我的答案是纯文字的描述,但是大致就是这样: URL参数传递:可以将参数直接拼接在页面的URL中,在打开目标页面时,通过获

    2024年02月06日
    浏览(38)
  • Vue路由跳转的五种方式

    路由跳转有两种形式:声明式导航、编程式导航 1. router-link 声明式 prop= :to=“…” 相当与 router.push(…) router-link中链接如果是’ / \\\'开始,就是从根路由开始 如果开始不带 ’ / \\\',则是从当前路由开始 例子 2. this.$router.push() 可追溯 编程式 router.push(…)//该方法的参数可以是一个

    2024年02月05日
    浏览(36)
  • 前端传递对象,后台接收对象的五种方式

    前端传递对象,后台接收对象的方式主要有以下几种: 使用 @RequestBody 注解 :在 Spring Boot 控制器方法中使用 @RequestBody 注解将请求体中的 JSON 数据映射为 Java 对象。 使用 @ModelAttribute 注解 :在 Spring Boot 控制器方法中使用 @ModelAttribute 注解将 URL 参数或表单数据映射为 Java 对象

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包