最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot 啟動時自動執(zhí)行代碼的幾種方式講解

 更新時間:2025年12月09日 10:49:59   作者:字節(jié)跳躍者  
本文主要介紹了SpringBoot 啟動時自動執(zhí)行代碼的幾種方式,包括static代碼塊、構(gòu)造方法、@PostConstruct注解、ApplicationRunner和CommandLineRunner接口,感興趣的可以了解一下

前言

目前開發(fā)的SpringBoot項目在啟動的時候需要預(yù)加載一些資源。而如何實現(xiàn)啟動過程中執(zhí)行代碼,或啟動成功后執(zhí)行,是有很多種方式可以選擇,我們可以在static代碼塊中實現(xiàn),也可以在構(gòu)造方法里實現(xiàn),也可以使用@PostConstruct注解實現(xiàn)。

當然也可以去實現(xiàn)Spring的ApplicationRunnerCommandLineRunner接口去實現(xiàn)啟動后運行的功能。在這里整理一下,在這些位置執(zhí)行的區(qū)別以及加載順序。

Java自身的啟動時加載方式

  • static代碼塊

    static靜態(tài)代碼塊,在類加載的時候即自動執(zhí)行。

  • 構(gòu)造方法

    在對象初始化時執(zhí)行。執(zhí)行順序在static靜態(tài)代碼塊之后。

Spring啟動時加載方式

  • @PostConstruct注解

    PostConstruct注解使用在方法上,這個方法在對象依賴注入初始化之后執(zhí)行。

  • ApplicationRunner和CommandLineRunner

    SpringBoot提供了兩個接口來實現(xiàn)Spring容器啟動完成后執(zhí)行的功能,兩個接口分別為CommandLineRunnerApplicationRunner

    這兩個接口需要實現(xiàn)一個run方法,將代碼在run中實現(xiàn)即可。這兩個接口功能基本一致,其區(qū)別在于run方法的入?yún)ⅰ?code>ApplicationRunner的run方法入?yún)?code>ApplicationArguments,為CommandLineRunner的run方法入?yún)镾tring數(shù)組。

    何為ApplicationArguments?

    官方文檔解釋為:

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

    在Spring應(yīng)用運行時使用的訪問應(yīng)用參數(shù)。即我們可以獲取到SpringApplication.run(…)的應(yīng)用參數(shù)。

  • Order注解

    當有多個類實現(xiàn)了CommandLineRunnerApplicationRunner接口時,可以通過在類上添加@Order注解來設(shè)定運行順序。

代碼測試

為了測試啟動時運行的效果和順序,編寫幾個測試代碼來運行看看。

TestPostConstruct

@Component
public class TestPostConstruct {
 
    static {
        System.out.println("static");
    }
    public TestPostConstruct() {
        System.out.println("constructer");
    }
 
    @PostConstruct
    public void init() {
        System.out.println("PostConstruct");
    }
}

TestApplicationRunner

@Component
@Order(1)
public class TestApplicationRunner implements ApplicationRunner{
    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        System.out.println("order1:TestApplicationRunner");
    }
}

TestCommandLineRunner

@Component
@Order(2)
public class TestCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... strings) throws Exception {
        System.out.println("order2:TestCommandLineRunner");
    }
}

執(zhí)行結(jié)果

總結(jié)

Spring應(yīng)用啟動過程中,肯定是要自動掃描有@Component注解的類,加載類并初始化對象進行自動注入。加載類時首先要執(zhí)行static靜態(tài)代碼塊中的代碼,之后再初始化對象時會執(zhí)行構(gòu)造方法。

在對象注入完成后,調(diào)用帶有@PostConstruct注解的方法。當容器啟動成功后,再根據(jù)@Order注解的順序調(diào)用CommandLineRunnerApplicationRunner接口類中的run方法。

因此,加載順序為static>constructer>@PostConstruct>CommandLineRunnerApplicationRunner.

到此這篇關(guān)于SpringBoot 啟動時自動執(zhí)行代碼的幾種方式講解的文章就介紹到這了,更多相關(guān)SpringBoot 啟動時自動執(zhí)行代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中new Date().getTime()時間戳使用詳解

    Java中new Date().getTime()時間戳使用詳解

    文章解釋了Java和JavaScript中Date對象的`getTime()`方法返回的是從特定時區(qū)(1.UTC)起至當前時間的總毫秒數(shù),強調(diào)與程序?qū)嶋H運行的時區(qū)無關(guān),都是從UTC時間起計算,強調(diào)文章最后強調(diào)了個人觀點,并鼓勵大家多多支持腳本之家
    2026-04-04
  • IDEA中Jar包的制作和使用方法

    IDEA中Jar包的制作和使用方法

    這篇文章主要介紹了IDEA的Jar包的制作和使用方法,文中補充介紹了idea的pom依賴配置后,不會自動下載jar包的解決辦法,感興趣的朋友跟隨小編一起看看吧
    2025-04-04
  • Java中的CAS(Compare-And-Swap)操作示例詳解

    Java中的CAS(Compare-And-Swap)操作示例詳解

    CAS是一種原子操作,用于在多線程環(huán)境中實現(xiàn)無鎖(lock-free)的線程安全編程,下面通過本文給大家介紹Java中的CAS(Compare-And-Swap)操作示例詳解,感興趣的朋友一起看看吧
    2025-06-06
  • IDEA JavaWeb項目啟動運行后出現(xiàn)404錯誤的解決方法

    IDEA JavaWeb項目啟動運行后出現(xiàn)404錯誤的解決方法

    這篇文章主要介紹了IDEA JavaWeb項目啟動運行后出現(xiàn)404錯誤的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 解決java.lang.IllegalStateException:Duplicate key異常問題

    解決java.lang.IllegalStateException:Duplicate key異常問題

    java.lang.IllegalStateException:Duplicatekey異常在將List轉(zhuǎn)換為Map時出現(xiàn),解決方法是使用toMap()的重載方法,如果已經(jīng)存在則不再修改,直接使用上一個數(shù)據(jù)
    2025-03-03
  • vue2向springboot傳值接收不到的解決方法

    vue2向springboot傳值接收不到的解決方法

    本文主要介紹了vue2向springboot傳值接收不到的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java中數(shù)組與集合的相互轉(zhuǎn)換實現(xiàn)解析

    Java中數(shù)組與集合的相互轉(zhuǎn)換實現(xiàn)解析

    這篇文章主要介紹了Java中數(shù)組與集合的相互轉(zhuǎn)換實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Java中的JVM內(nèi)存分析與故障排查指南

    Java中的JVM內(nèi)存分析與故障排查指南

    Java虛擬機(JVM)是Java應(yīng)用的運行時環(huán)境,其內(nèi)存管理機制直接影響著應(yīng)用的性能和穩(wěn)定性,本文將介紹JVM內(nèi)存分析的基本方法,重點介紹如何使用jmap、jhat和VisualVM等工具進行內(nèi)存分析,并探討常見的內(nèi)存泄漏排查方法,需要的朋友可以參考下
    2025-11-11
  • Java并發(fā)編程之對象的組合

    Java并發(fā)編程之對象的組合

    這篇文章主要介紹了Java并發(fā)編程之對象的組合,文章基于Java的相關(guān)資料展開主題內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04

最新評論

湘西| 汨罗市| 嘉峪关市| 额尔古纳市| 白水县| 乐安县| 湘乡市| 遵化市| 南溪县| 蓬安县| 城步| 宁夏| 罗江县| 都江堰市| 调兵山市| 明水县| 屏东县| 平潭县| 大竹县| 德钦县| 若尔盖县| 潼南县| 龙山县| 石台县| 镇江市| 闽侯县| 商河县| 阳西县| 石阡县| 方山县| 长武县| 通海县| 龙岩市| 顺平县| 德令哈市| 江川县| 南城县| 西青区| 清原| 花莲县| 万盛区|