<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot 啟動時自動執(zhí)行代碼的幾種方式,還有誰不會??

          共 2495字,需瀏覽 5分鐘

           ·

          2022-06-06 18:52

          往期熱門文章:

          1、勁爆!Java 通用泛型要來了。。

          2、如何寫出讓同事吐血的代碼?

          3、遭棄用的 Docker Desktop 放大招!宣布支持 Linux

          4、IDEA公司再發(fā)新神器!超越 VS Code 騷操作!

          5、推薦好用 Spring Boot 內(nèi)置工具類

          來源:blog.csdn.net/u011291072/article/details/81813662

          • 前言

          • java自身的啟動時加載方式

          • Spring啟動時加載方式

          • 代碼測試

          • 總結(jié)


          前言

          目前開發(fā)的SpringBoot項目在啟動的時候需要預加載一些資源。而如何實現(xiàn)啟動過程中執(zhí)行代碼,或啟動成功后執(zhí)行,是有很多種方式可以選擇,我們可以在static代碼塊中實現(xiàn),也可以在構造方法里實現(xiàn),也可以使用@PostConstruct注解實現(xiàn)。
          當然也可以去實現(xiàn)Spring的ApplicationRunnerCommandLineRunner接口去實現(xiàn)啟動后運行的功能。在這里整理一下,在這些位置執(zhí)行的區(qū)別以及加載順序。

          java自身的啟動時加載方式

          static代碼塊

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

          構造方法

          在對象初始化時執(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)ⅰ?/span>ApplicationRunner的run方法入?yún)?/span>ApplicationArguments,為CommandLineRunner的run方法入?yún)镾tring數(shù)組。

          何為ApplicationArguments

          官方文檔解釋為:
          Provides access to the arguments that were used to run a SpringApplication.
          在Spring應用運行時使用的訪問應用參數(shù)。即我們可以獲取到SpringApplication.run(…)的應用參數(shù)。

          Order注解

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

          代碼測試

          為了測試啟動時運行的效果和順序,編寫幾個測試代碼來運行看看。
          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應用啟動過程中,肯定是要自動掃描有@Component注解的類,加載類并初始化對象進行自動注入。加載類時首先要執(zhí)行static靜態(tài)代碼塊中的代碼,之后再初始化對象時會執(zhí)行構造方法。
          在對象注入完成后,調(diào)用帶有@PostConstruct注解的方法。當容器啟動成功后,再根據(jù)@Order注解的順序調(diào)用CommandLineRunnerApplicationRunner接口類中的run方法。
          因此,加載順序為static>constructer>@PostConstruct>CommandLineRunnerApplicationRunner.

          最近熱文閱讀:

          1、如何寫出讓同事吐血的代碼?
          2、遭棄用的 Docker Desktop 放大招!宣布支持 Linux
          3、IDEA公司再發(fā)新神器!超越 VS Code 騷操作!
          4、推薦好用 Spring Boot 內(nèi)置工具類
          5、五個刁鉆的String面試問題及解答
          6、IntelliJ平臺將完全停止使用Log4j
          7、神操作!我把 3000 行代碼重構成 15 行!
          8、我用Java幾分鐘處理完30億個數(shù)據(jù)...
          9、一款自動生成單元測試的 IDEA 插件
          10、微軟 10 大最受歡迎 GitHub 項目,最高 Star 數(shù)量 13 萬
          關注公眾號,你想要的Java都在這

          瀏覽 31
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  韩国精品二区 | 97人妻一区二区三区 | 久久久久久这里只有好吊视频 | 一级性AAAA生活 | 日本zaixian三区 |