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

    文章

    2997

    浏览量

    115671
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73145
  • spring
    +关注

    关注

    0

    文章

    341

    浏览量

    15775
  • SpringBoot
    +关注

    关注

    0

    文章

    177

    浏览量

    629

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32时钟的启动过程

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

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

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

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

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

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

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

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

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

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

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

    电机软启动器常见5大故障

    启动器是一种集电机软起动、软停车、轻载节能和多种保护功能于一体的电机控制装置。不仅实现在整个起动过程中无冲击而平滑的起动电机,而且可根据电动机负载的特性来调节起动过程中的参数,如限流
    的头像 发表于 04-23 17:26 1916次阅读

    半导体制造过程中的三个主要阶段

    前段工艺(Front-End)、中段工艺(Middle-End)和后段工艺(Back-End)是半导体制造过程中的三个主要阶段,它们在制造过程中扮演着不同的角色。
    的头像 发表于 03-28 09:47 5670次阅读
    半导体制造<b class='flag-5'>过程中</b>的三个主要阶段

    STM32的上电启动过程分享

    复位后的启动模式。xa0 xa0 需要注意的是STM32上电复位以后,代码区都是从0x00000000开始的,三种启动模式只是将各自存储空间的地址映射到0x00000000。 1)从
    发表于 03-07 08:09

    如何在日常开发过程中提高代码质量

    。 提高代码质量是一个系统工程,本文主要介绍开发人员如何在日常开发过程中提高代码质量。 01 什么是代码质量? 代码质量一般用于衡量
    的头像 发表于 01-23 09:09 1027次阅读
    如何在日常开发<b class='flag-5'>过程中</b>提高<b class='flag-5'>代码</b>质量

    怎么提升单片机代码执行效率

    ​ 提升单片机代码执行效率需要从多个方面入手,包括代码优化、硬件资源利用、编译器设置、中断处理优化以及其他技巧等。在实际应用,需要根据具体需求和硬件条件综合考虑这些因素,以
    的头像 发表于 01-10 11:06 938次阅读

    如何在播放视频过程中插入音频

    ZDP14x0是一款基于开源GUI引擎的图像显示专用驱动芯片,可以通过串口或者SPI与其他芯片通信,且能播放视频。本文将介绍如何在播放视频过程中插入音频。
    的头像 发表于 12-26 11:13 1950次阅读
    如何在播放视频<b class='flag-5'>过程中</b>插入音频