0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SpringBoot如何实现启动过程中执行代码

Android编程精选 来源:CSDN技术社区 作者:小白码上飞 2022-06-20 17:32 次阅读
前言

目前开发的SpringBoot项目在启动的时候需要预加载一些资源。而如何实现启动过程中执行代码,或启动成功后执行,是有很多种方式可以选择,我们可以在static代码块中实现,也可以在构造方法里实现,也可以使用@PostConstruct注解实现。

当然也可以去实现Spring的ApplicationRunnerCommandLineRunner接口去实现启动后运行的功能。在这里整理一下,在这些位置执行的区别以及加载顺序。

java自身的启动时加载方式

static代码块

static静态代码块,在类加载的时候即自动执行。

构造方法

在对象初始化时执行。执行顺序在static静态代码块之后。

Spring启动时加载方式

@PostConstruct注解

PostConstruct注解使用在方法上,这个方法在对象依赖注入初始化之后执行。

ApplicationRunner和CommandLineRunner

SpringBoot提供了两个接口来实现Spring容器启动完成后执行的功能,两个接口分别为CommandLineRunnerApplicationRunner

这两个接口需要实现一个run方法,将代码在run中实现即可。这两个接口功能基本一致,其区别在于run方法的入参。ApplicationRunner的run方法入参为ApplicationArguments,为CommandLineRunner的run方法入参为String数组。

何为ApplicationArguments

官方文档解释为:

Provides access to the arguments that were used to run a SpringApplication.

在Spring应用运行时使用的访问应用参数。即我们可以获取到SpringApplication.run(…)的应用参数。

Order注解

当有多个类实现了CommandLineRunnerApplicationRunner接口时,可以通过在类上添加@Order注解来设定运行顺序。

代码测试

为了测试启动时运行的效果和顺序,编写几个测试代码来运行看看。

TestPostConstruct

@Component
publicclassTestPostConstruct{

static{
System.out.println("static");
}
publicTestPostConstruct(){
System.out.println("constructer");
}

@PostConstruct
publicvoidinit(){
System.out.println("PostConstruct");
}
}

TestApplicationRunner

@Component
@Order(1)
publicclassTestApplicationRunnerimplementsApplicationRunner{
@Override
publicvoidrun(ApplicationArgumentsapplicationArguments)throwsException{
System.out.println("order1:TestApplicationRunner");
}
}

TestCommandLineRunner

@Component
@Order(2)
publicclassTestCommandLineRunnerimplementsCommandLineRunner{
@Override
publicvoidrun(String...strings)throwsException{
System.out.println("order2:TestCommandLineRunner");
}
}

执行结果

2cc7f5a8-da4f-11ec-ba43-dac502259ad0.png

总结

Spring应用启动过程中,肯定是要自动扫描有@Component注解的类,加载类并初始化对象进行自动注入。加载类时首先要执行static静态代码块中的代码,之后再初始化对象时会执行构造方法。

在对象注入完成后,调用带有@PostConstruct注解的方法。当容器启动成功后,再根据@Order注解的顺序调用CommandLineRunnerApplicationRunner接口类中的run方法。

因此,加载顺序为static>constructer>@PostConstruct>CommandLineRunnerApplicationRunner.

原文标题:SpringBoot 启动时自动执行代码的几种方式,还有谁不会??

文章出处:【微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2953

    浏览量

    104498
  • 代码
    +关注

    关注

    30

    文章

    4730

    浏览量

    68272
  • spring
    +关注

    关注

    0

    文章

    338

    浏览量

    14298
  • SpringBoot
    +关注

    关注

    0

    文章

    173

    浏览量

    164

原文标题:SpringBoot 启动时自动执行代码的几种方式,还有谁不会??

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    BQ79600-Q1启动过程

    电子发烧友网站提供《BQ79600-Q1启动过程.pdf》资料免费下载
    发表于 11-09 14:57 0次下载
    BQ79600-Q1<b class='flag-5'>启动过程</b>

    AIC3254启动过程是怎样的?需要功能调节延时,请问怎么实现

    AIC3254 启动问题 :没有IIS,时钟是用MSP430产生的8M给AIC3254工作时钟的,但是每次启动要用手摸一下MCLK才能启动,什么原因呢!大侠们能否说明一下AIC3254启动
    发表于 11-07 07:28

    负载电容对电源转换器启动过程的影响

    理想的电源转换器需要无论负载如何变化都保持输出电压稳定。在实际应用,负载瞬态期间选择不合适的输出电容会导致过高的纹波电压和浪涌电流,从而影响电源转换器的性能。本文将介绍选择输出电容的指南,详细介绍负载电容对启动过程的影响,并提供改进建议。
    的头像 发表于 10-28 11:08 182次阅读
    负载电容对电源转换器<b class='flag-5'>启动过程</b>的影响

    PA3113D2在系统启动过程中会出现一个POP声,请问是什么原因造成的?

    请教各位高手,我现在CODEC芯片用的是WOLFSON WM8960,OPA用的是TI PA3113D2,上电瞬间的POP声已经解决,但是在系统启动过程中(快启动完成时)还会出现一个POP声,请问是什么原因造成的?
    发表于 10-18 06:39

    使用pahomqtt启动过程中pipe_fops_open时出现rt_condvar_timedwait ,如何解决?

    在使用pahomqtt 启动过程中pipe_fops_open 时出现rt_condvar_timedwait 死等,而RTT 5.0则可以。请问该如何解决?
    发表于 09-26 07:11

    YTM32的HA系列微控制器启动过程详解

    见,以确保信息安全的需要。然而,开发者在自行编译固件时,需要配合BOOT ROM的bootloader,才能正常地引导到用户应用程序,完成启动过程
    的头像 发表于 07-15 09:24 345次阅读
    YTM32的HA系列微控制器<b class='flag-5'>启动过程</b>详解

    启动柜的作用和功能是什么

    启动柜是一种用于电机启动的电气设备,它通过控制电机启动过程中的电压和电流,实现电机的平滑启动,减少启动
    的头像 发表于 06-18 14:29 1256次阅读

    什么叫软启动?如何实现启动

    启动(Soft Start)是一种电动机启动方式,它通过控制电动机的启动电流,使电动机在启动过程中逐渐加速,从而减少启动时的电流冲击和机械
    的头像 发表于 06-18 11:31 7016次阅读

    STM32__UCOSII系统启动过程中空闲任务和统计任务扮演怎样的角色?

    如题STM32__UCOSII系统启动过程中空闲任务和统计任务扮演怎样的角色
    发表于 05-08 07:37

    三相电机起动过程中,起动电流不平会有问题吗?

    三相电机起动过程中,起动电流不平会有问题吗? 三相电机作为工业生产中常用的动力设备,其起动过程中起动电流的不平问题可能会在一定程度上影响设备的正常运行。本文将探讨三相电机起动电流不平的原因、对设备
    的头像 发表于 03-26 15:40 784次阅读

    STM32WBA Nucleo-64设置主频为100M,发现启动过程中卡死在PWR_VOSR_VOSRDY,为什么?

    使用ST官方的STM32WBA Nucleo-64板子, 当设置主频为100M,发现启动过程中卡死在PWR_VOSR_VOSRDY; 设置主频为16MHz的时候,可以正常完成初始化。 使用的是CodeMx生成的工程 这是啥原因呢?看手册也没找到原因
    发表于 03-14 08:28

    陶瓷电熔炉启动过程中升温停止问题的原因及解决办法分析

    放射性废物的处置问题一直是核工业发展过程中不可忽视的关键环节。核燃料后处理循环过程中产生的高放废液的安全处置是放射性废物处理的关键,国际上比较成熟的高放废液处理方法是玻璃固化[1]。
    的头像 发表于 03-12 16:43 614次阅读
    陶瓷电熔炉<b class='flag-5'>启动过程中</b>升温停止问题的原因及解决办法分析

    stm32启动过程详解

    STM32启动过程详解 近年来,STM32微控制器在嵌入式系统的应用越来越广泛。STM32微控制器具有高性能、低功耗、易扩展和丰富的外设接口等优势。而要让STM32微控制器正常工作,首先要了解它
    的头像 发表于 12-08 15:47 1486次阅读

    kernel到android核心启动过程

    总结一个图:kernel 到android核心启动过程 kernel镜像执行跳转到start_kernel开始执行,在rest_init会创建两个kernel 进程(线程),其分别是为
    的头像 发表于 12-04 16:59 869次阅读
    kernel到android核心<b class='flag-5'>启动过程</b>

    logd的启动过程和内容

    logd作为native service,系统启动过程通过读取rc文件来启动,相关的属性定义在如下logd.rc文件。 2.2.1 logd启动过程 logd
    的头像 发表于 11-23 16:54 788次阅读
    logd的<b class='flag-5'>启动过程</b>和内容