国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

還不懂 Spring Boot 啟動流程的,看這一篇就夠了!

這篇具有很好參考價值的文章主要介紹了還不懂 Spring Boot 啟動流程的,看這一篇就夠了!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

通常,我們只需為一個類添加@SpringBootApplication注解,然后再添加一個main方法,其內(nèi)固定的寫法為SpringApplication.run(Application.class, args)。由此,便可啟動Spring Boot服務(wù)。

具體而言,Spring Boot的啟動流程包括以下幾個步驟:

載入 Spring Boot 應(yīng)用的啟動類

根據(jù)啟動類所在的包路徑掃描相關(guān)的類文件

基于掃描到的類自動配置 Spring 應(yīng)用

激活內(nèi)嵌的 Web 服務(wù)器

啟動 Spring 應(yīng)用程序的運(yùn)行
深入解析Spring Boot啟動過程的源碼實(shí)現(xiàn):

@SpringBootConfiguration // 標(biāo)記該類為 Spring Boot 應(yīng)用程序的配置類
@EnableAutoConfiguration // 啟用 Spring Boot 的自動配置機(jī)制
public class MyApp {
 public static void main(String[] args) {
     SpringApplication.run(MyApp.class, args); // 執(zhí)行 Spring Boot 應(yīng)用程序
 }
}

在啟動 Spring Boot 應(yīng)用程序時,需要在啟動類上使用 @SpringBootApplication 注解,以通知 Spring Boot 這是應(yīng)用程序的啟動類。@SpringBootApplication 注解包含了三個子注解,分別為 @Configuration、@EnableAutoConfiguration 和 @ComponentScan,分別表示該類是配置類、啟用自動配置和掃描組件。

在 main 方法中,我們可以使用以下代碼來啟動 Spring Boot 應(yīng)用程序:

public class MyApp {

    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }

}

該方法接受兩個參數(shù),第一個參數(shù)是啟動類的類對象 MyApp.class,第二個參數(shù)是主方法的參數(shù) args,主方法的參數(shù)可以通過命令行參數(shù)傳遞給應(yīng)用程序。

在 SpringApplication.run 方法中,會執(zhí)行以下幾個步驟:

實(shí)例化一個 SpringApplication 對象,它存儲了 Spring Boot 應(yīng)用程序的所有配置信息。
基于 SpringApplication 中的配置信息,初始化一個 ApplicationContext 對象,它是 Spring 應(yīng)用程序的上下文。
在 ApplicationContext 中注冊所有帶有 @Configuration 注解的類。
根據(jù) @EnableAutoConfiguration 注解,自動配置 Spring 應(yīng)用程序。
掃描所有帶有 @Component 注解的類,并將它們注冊到 ApplicationContext 中。
啟動嵌入式 Web 服務(wù)器。
運(yùn)行 Spring 應(yīng)用程序。
以下是 SpringApplication.run 方法的源代碼注釋:

  /**
    *   這是 Spring Boot 應(yīng)用程序的入口點(diǎn)
    *   @param primarySource 應(yīng)用程序的主要源(通常是一個@Configuration類)。
    *   @param args 命令行參數(shù)。
    *   @return ApplicationContext。 
    */
    public static ConfigurableApplicationContext run(Class\<?> primarySource, String... args) {
        return run(new Class[]{primarySource}, args);
    }

    /**
    *   這是 Spring Boot 應(yīng)用程序的入口點(diǎn)。
    *   @param primarySources 應(yīng)用程序的主要源(通常是一個@Configuration類)。
    *   @param args 命令行參數(shù)。
    *   @return ApplicationContext。
    */
    public static ConfigurableApplicationContext run(Class&lt;?&gt;[] primarySources, String[] args) {
        // 創(chuàng)建一個新的 SpringApplication 實(shí)例,主要用于設(shè)置 SpringApplication 的屬性
        SpringApplication application = new SpringApplication(primarySources);
        // 應(yīng)用程序啟動時應(yīng)用的環(huán)境。 這可以被用來定制化應(yīng)用程序環(huán)境以及激活不同的配置文件屬性。默認(rèn)情況下, SpringApplication 將使用適當(dāng)?shù)?PropertySourceLoader 從 application.properties 中加載默認(rèn)的屬性。
        applyInitializers(application);
        // 設(shè)置命令行參數(shù)
        ConfigurableApplicationContext context = application.run(args);
        // 后置操作
        postProcessApplicationContext(context);
        return context;
    }
    public static ConfigurableApplicationContext launch(Class&lt;?&gt; primarySource, String... args) {

         return launch(new Class<?>[] { primarySource }, args);

    }
    public static ConfigurableApplicationContext launch(Class<?>[] primarySources, String[] args) {

         // 創(chuàng)建 Launcher 對象,包含了所有的應(yīng)用程序配置信息
         Launcher launcher = new Launcher(primarySources);
         // 運(yùn)行應(yīng)用程序,并返回上下文對象
         return launcher.run(args);

    }
    public ConfigurableApplicationContext run(String... args) {

         // 創(chuàng)建并啟動 ConfigurableApplicationContext 對象,返回該對象
         ConfigurableApplicationContext context = createApplicationContext();
         // 執(zhí)行應(yīng)用程序的監(jiān)聽器
         listeners.starting(this.applicationArguments);
         try {
             // 準(zhǔn)備 ApplicationContext 環(huán)境
             prepareEnvironment(context, this.environment);
             // 配置 ApplicationContext
             configureIgnoreBeanInfo(context);
             // 執(zhí)行所有的 ApplicationContextInitializer
             applyInitializers(context);
             // 執(zhí)行所有的 LauncherRunListener 的 starting 方法
             listeners.contextPrepared(context);
             // 打印應(yīng)用程序的 Banner
             Banner printedBanner = printBanner();
             // 創(chuàng)建 ApplicationContext
             context.refresh();
             // 將 ApplicationContext 注冊到 JVM 關(guān)閉鉤子中
             prepareContext(context, printedBanner);
             // 執(zhí)行所有的 ApplicationContextInitializer 的 postProcessApplicationContext 方法
             postProcessApplicationContext(context);
             // 執(zhí)行所有的 LauncherRunListener 的 contextLoaded 方法
             listeners.contextLoaded(context);
         }
         catch (Throwable ex) {
             handleRunFailure(context, ex, listeners);
             throw new IllegalStateException(ex);
         }

         try {
             // 執(zhí)行所有的 LauncherRunListener 的 started 方法
             listeners.started(context);
             // 啟動嵌入式的 Web 服務(wù)器
             callRunners(context, this.applicationArguments);
         }
         catch (Throwable ex) {
             handleRunFailure(context, ex, listeners);
             throw new IllegalStateException(ex);
         }

         try {
             // 執(zhí)行所有的 LauncherRunListener 的 running 方法
             listeners.running(context);
         }
         catch (Throwable ex) {
             handleRunFailure(context, ex, listeners);
             throw new IllegalStateException(ex);
         }

         return context;

    }

在 SpringApplication.run 方法的執(zhí)行過程中,會涉及到一系列關(guān)鍵步驟,其中包括 prepareEnvironment、applyInitializers、postProcessApplicationContext和callRunners 等方法的調(diào)用。這些方法都扮演著啟動 Spring Boot 應(yīng)用程序的重要角色,它們會對應(yīng)用程序進(jìn)行配置、初始化、啟動等操作,確保整個應(yīng)用程序的正常運(yùn)行和穩(wěn)定性。
好的,基本上三分鐘已經(jīng)講完了,希望對各位有所幫助。如果還有任何疑問或需要補(bǔ)充的內(nèi)容,歡迎在評論區(qū)或私信留言。今天的總結(jié)內(nèi)容就到這里了,感謝大家的閱讀。文章來源地址http://www.zghlxwxcb.cn/news/detail-453504.html

到了這里,關(guān)于還不懂 Spring Boot 啟動流程的,看這一篇就夠了!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • CSS基礎(chǔ)——看這一篇就夠了

    CSS基礎(chǔ)——看這一篇就夠了

    目錄 一、CSS簡介 1.CSS是什么? 2.CSS的作用 3.CSS的構(gòu)成 二、CSS選擇器 1.基礎(chǔ)選擇器 (1).標(biāo)簽選擇器 (2)類選擇器 (3)標(biāo)簽選擇器 (4) 通配符選擇器 2.復(fù)合選擇器 (1)后代選擇器(包含選擇器) (2)子選擇器 (3)并集選擇器 (4)偽類選擇器 ?三、基本屬性 1.字體屬性

    2024年02月09日
    瀏覽(98)
  • 精通線程池,看這一篇就夠了

    精通線程池,看這一篇就夠了

    當(dāng)我們運(yùn)用多線程技術(shù)處理任務(wù)時,需要不斷通過new的方式創(chuàng)建線程,這樣頻繁創(chuàng)建和銷毀線程,會造成cpu消耗過多。那么有沒有什么辦法 避免頻繁創(chuàng)建線程 呢? 當(dāng)然有,和我們以前學(xué)習(xí)過多連接池技術(shù)類似,線程池通過提前創(chuàng)建好線程保存在線程池中, 在任務(wù)要執(zhí)行時取

    2023年04月17日
    瀏覽(97)
  • ElasticSearch常見用法,看這一篇就夠了

    ElasticSearch常見用法,看這一篇就夠了

    2024送書福利正式起航 關(guān)注「哪吒編程」,提升Java技能 文末送3本《一本書講透Elasticsearch:原理、進(jìn)階與工程實(shí)踐》 大家好,我是哪吒。 ElasticSearch是一款由Java開發(fā)的開源搜索引擎,它以其出色的實(shí)時搜索、穩(wěn)定可靠、快速安裝和方便使用的特性,在Java開發(fā)社區(qū)中贏得了廣

    2024年03月19日
    瀏覽(94)
  • 超圖(HyperGraph)學(xué)習(xí),看這一篇就夠了

    超圖(HyperGraph)學(xué)習(xí),看這一篇就夠了

    最近事多,好久沒更新了,隨便寫寫(Ctrl+V)點(diǎn) 一、超圖定義 通常圖論中的圖,一條edge只能連接2個vertex,在超圖中,不限量 如何理解呢,就用我正在做的KT問題來看:7道題目-7個頂點(diǎn);4種概念-4條超邊,其中第1,2,3題都是考察概念1的,則構(gòu)建一個包含了這仨的超邊,以此類

    2024年02月02日
    瀏覽(27)
  • SourceTree使用看這一篇就夠了

    SourceTree使用看這一篇就夠了

    ?你夢想有一天成為git大師,然而面對復(fù)雜的git命令,你感覺TMD這我能記得住嗎?你曾經(jīng)羨慕從命令行敲git命令,才會更加炫酷,然而時間一長,TMD命令我有忘了。那么今天我介紹的這款工具會讓你從git命令中解救出來,這就是git可視化工具SourcTree。 事實(shí)上Git的功能十分強(qiáng)大

    2024年02月08日
    瀏覽(23)
  • Docker Volume 看這一篇就夠了

    Docker Volume 看這一篇就夠了

    默認(rèn)情況下,在容器內(nèi)創(chuàng)建的所有文件都存儲在可寫容器層上。這意味著: 當(dāng)該容器不再存在時,數(shù)據(jù)不會持續(xù)存在,并且如果另一個進(jìn)程需要數(shù)據(jù),則可能很難將數(shù)據(jù)從容器中取出。 容器的可寫層與運(yùn)行容器的主機(jī)緊密耦合。您無法輕松地將數(shù)據(jù)移動到其他地方。 寫入容

    2024年02月02日
    瀏覽(106)
  • Linux 命令大全(看這一篇就足夠)

    Linux 命令大全(看這一篇就足夠)

    目錄 第一章:Linux目錄結(jié)構(gòu) 第一節(jié):基本介紹 第二節(jié):Linux具體目錄結(jié)構(gòu) 第二章:Linux常用命令 第一節(jié):目錄處理命令 2.1.1?命令格式 2.1.2 列出目錄的內(nèi)容:ls 命令 2.1.3 創(chuàng)建目錄:mkdir 命令 2.1.4 切換工作目錄:cd 命令 2.1.5 顯示當(dāng)前路徑:pwd 命令? 2.1.6 刪除空目錄:rmdir 命

    2024年02月03日
    瀏覽(56)
  • CAS自旋鎖,看這一篇就夠了

    前序 時隔多年,杰倫終于出了新專輯,《最偉大的作品》讓我們穿越到1920年,見到了馬格利特的綠蘋果、大利的超現(xiàn)實(shí)、常玉畫的大腿、莫奈的睡蓮、徐志摩的詩… 他說“最偉大的作品”并不是自己的歌,而是這個世界上最偉大的藝術(shù)作品們。 為什么要寫CAS自旋鎖呢?最近

    2023年04月08日
    瀏覽(19)
  • 還不會拓?fù)渑判颍靠催@一篇就夠了

    還不會拓?fù)渑判??看這一篇就夠了

    拓?fù)渑判蚴且环N有向無環(huán)圖(DAG)的頂點(diǎn)排序方法,它將一個有向無環(huán)圖中的所有頂點(diǎn)排成一個線性序列,使得圖中 任意一條有向邊上的起點(diǎn)排在終點(diǎn)的前面 。 這樣說還不夠具體,我們先來看一個例子。假設(shè)某大學(xué)的課程安排如下: 課程編號 課程名稱 先修課程 1 1 1 高等數(shù)

    2023年04月08日
    瀏覽(74)
  • 還不會二分查找?看這一篇就夠了

    還不會二分查找?看這一篇就夠了

    二分查找分為整數(shù)二分和浮點(diǎn)數(shù)二分,一般所說的二分查找都是指整數(shù)二分。 滿足單調(diào)性的數(shù)組一定可以使用二分查找,但可以使用二分查找的數(shù)組不一定需要滿足單調(diào)性。 不妨假設(shè)我們找到了條件 C 1 C_1 C 1 ? ,它和它的 對立條件 C 2 C_2 C 2 ? 能夠?qū)?shù)組 a a a 一分為二,

    2024年01月19日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包