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
    +关注

    关注

    20

    文章

    3006

    浏览量

    116832
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74381
  • spring
    +关注

    关注

    0

    文章

    341

    浏览量

    16054
  • SpringBoot
    +关注

    关注

    0

    文章

    178

    浏览量

    712

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入解析U-Boot TPL代码:嵌入式启动的“第一棒”背后的秘密

    在嵌入式系统启动过程中,从按下电源键到操作系统开始运行,中间藏着一系列精密的初始化步骤。今天我们就来拆解 Rockchip 平台 U-Boot 的 TPL(Tiny Program Loader)阶段核心代码tpl.c,看看这
    的头像 发表于 02-05 14:07 1301次阅读
    深入解析U-Boot TPL<b class='flag-5'>代码</b>:嵌入式<b class='flag-5'>启动</b>的“第一棒”背后的秘密

    变频器起动过程曲线参数怎么设置

    变频器起动过程曲线参数的设置是工业自动化控制的关键技术环节,直接影响电机启动性能、设备寿命及能耗效率。以下是基于工程实践和理论分析的详细设置指南: 一、基础参数理解 1. 加速时间
    的头像 发表于 01-23 12:03 474次阅读
    变频器起<b class='flag-5'>动过程</b>曲线参数怎么设置

    讲解C语言代码实现过程

    重点讲解C语言代码实现过程,算法的C语言实现过程具有一般性,通过PID算法的C语言实现,可以以
    发表于 01-21 07:58

    CW32系统发启动过程

    决定本次芯片复位后的启动模式。系统启动完成之后,CPU 从存储器的 0x0000 0000 地址获取堆栈顶的地址,并从存储器的 0x0000 0004 指示的地址开始执行代码
    发表于 12-15 07:54

    CW32时钟的启动过程

    CW32F030 的时钟源启动过程类似,当设置 SYSCTRL_CR1.HSEEN 为 1 后,HSE 时钟振荡电路开始工作,但此时输出的时钟信号振幅很小。经过启动时间阶段后,输出时钟信号的振幅
    发表于 11-13 07:49

    晶圆制造过程中的掺杂技术

    在超高纯度晶圆制造过程中,尽管晶圆本身需达到11个9(99.999999999%)以上的纯度标准以维持基础半导体特性,但为实现集成电路的功能化构建,必须通过掺杂工艺在硅衬底表面局部引入特定杂质。
    的头像 发表于 10-29 14:21 1242次阅读
    晶圆制造<b class='flag-5'>过程中</b>的掺杂技术

    大电流起弧过程中电弧声压/超声波信号的特征提取与故障诊断

    接触不良、绝缘破损、元件老化等故障时,电弧的燃烧状态会发生改变,相应的声压超声波信号也会出现异常变化。因此,通过提取这些信号的关键特征,并结合特征变化规律进行分析,就能实现对大电流起弧过程中故障的精准诊
    的头像 发表于 09-29 09:27 723次阅读
    大电流起弧<b class='flag-5'>过程中</b>电弧声压/超声波信号的特征提取与故障诊断

    rtthread在线程执行过程中,被中断打断后进入中断处理时,是否有保护FPU的状态?

    rtthread 3.1.3版本 程序实现的是正弦波的计算输出,在运行过程中,为了保证执行效率,会在中断中进行当前幅值输出的计算; 同时在运行过程中会接收界面下传的新一个幅值的数据,接
    发表于 09-24 07:50

    对于新唐的8051芯片,在Keil Debug模式下的单步执行过程中定时器可以停止吗?

    对于新唐的8051芯片,在Keil Debug模式下的单步执行过程中,定时器可以停止吗?
    发表于 08-26 06:33

    对于新唐的8051芯片,在Keil Debug模式下的单步执行过程中,定时器可以停止吗?

    对于新唐的8051芯片,在Keil Debug模式下的单步执行过程中,定时器可以停止吗?
    发表于 08-25 07:57

    ElfBoard技术贴|如何在【RK3588】ELF 2开发板实现自定义开机动画

    在嵌入式Linux系统的启动过程中,默认的文本启动日志往往缺乏良好的用户体验。为了提升设备启动时的视觉效果,可以通过psplash工具实现图形化开机动画,支持静态logo或动态动画显示
    的头像 发表于 07-25 09:37 1672次阅读
    ElfBoard技术贴|如何在【RK3588】ELF 2开发板<b class='flag-5'>中</b><b class='flag-5'>实现</b>自定义开机动画

    固件升级过程中,如何禁用EC INT中断?

    固件升级过程中,EC INT中断经常会被触发,如何禁用? 这个中断,协议栈是怎么触发的或者说需要满足什么条件?
    发表于 07-25 06:43

    半导体硅片生产过程中的常用掺杂技术

    在半导体硅片生产过程中,精确调控材料的电阻率是实现器件功能的关键,而原位掺杂、扩散和离子注入正是达成这一目标的核心技术手段。下面将从专业视角详细解析这三种技术的工艺过程与本质区别。
    的头像 发表于 07-02 10:17 2804次阅读
    半导体硅片生产<b class='flag-5'>过程中</b>的常用掺杂技术

    绕线转子永磁电机启动过程准时间最优控制

    摘要:绕线转子永磁电机(WR-PMM)转子斩波调阻启动是一种便捷有效的启动控制策略。通过斩波调阻的方法实时调节转子外接电阻,能使启动过程中平均转矩始终保持最大值,实现绕线转子永磁电机
    发表于 06-12 13:50

    晶闸管控制异步电机软启动过程中振荡现象研究

    纯分享帖,需要者可点击附件免费获取完整资料~~~*附件:晶闸管控制异步电机软启动过程中振荡现象研究.pdf【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 06-04 14:39