欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Boot啟動流程斷點過程解析

 更新時間:2019年11月27日 10:40:37   投稿:yaominghui  
這篇文章主要介紹了Spring Boot啟動流程斷點過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

這篇文章主要介紹了Spring Boot啟動流程斷點過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

啟動入口

跟進run方法 : 一個用來使用默認的配置從特定的源運行SpringApplication的靜態(tài)幫助類。

這個類有兩個重載方法,另一個用來傳入多個源。通常,單個參數(shù)方法是數(shù)組方法的一個特例

創(chuàng)建一個新的SpringApplication實例。這個應(yīng)用程序上下文會從特定的源加載Beans,這個實例會在調(diào)用run方法之前被定制化。

Web應(yīng)用程序類型的枚舉:WebApplicationType,包含NONE(不是web應(yīng)用),SERVLET(基于Servlet的web應(yīng)用),REACTIVE(基于Reactive的web應(yīng)用)

  • 直接jar包運行不使用web容器
  • 使用嵌入式的Servlet web容器
  • 使用反應(yīng)式的web容器

setInitializers((Collection) getSpringFactoriesInstances(
  ApplicationContextInitializer.class));

用于創(chuàng)建和加載Spring工廠方法實例

4.運行SpringApplication的run方法

Java SPI在 Spring Boot中的應(yīng)用

SpringBoot底層的自動化都是由這些SPI實現(xiàn)類來實現(xiàn)的:初始化,監(jiān)聽器,自動配置導(dǎo)入監(jiān)聽器,自動配置導(dǎo)入過濾器,自動配置,失敗分析器,可用模板提供者

Spring Boot找到main方式的方式

通過拋異常的形式來獲取堆棧信息,再獲取啟動類的信息。

以上都是new SpringBootApplication的過程,下面分析run方法

/**
* Run the Spring application, creating and refreshing a new
* {@link ApplicationContext}.
* 運行一個Spring應(yīng)用,創(chuàng)建和刷新一個新的ApplicationContext
* @param args the application arguments (usually passed from a Java main method)
* 應(yīng)用參數(shù)通過java main方法傳遞過來
* @return a running {@link ApplicationContext}
*/
public ConfigurableApplicationContext run(String... args) {
// 任務(wù)計時器工具,可同時計數(shù)多個任務(wù)
StopWatch stopWatch = new StopWatch();
stopWatch.start();
//ApplicationContext是Spring的中心接口,為應(yīng)用提供配置:1bean工廠2加載資源3注冊的監(jiān)聽器發(fā)布事件4解析消息
ConfigurableApplicationContext context = null;
Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList<>();
//headless 模式:服務(wù)器端模式,表示系統(tǒng)沒有鍵盤鼠標等前端應(yīng)用
configureHeadlessProperty();
//監(jiān)聽器容器,對run方法各個階段事件進行監(jiān)聽,觀察者模式
SpringApplicationRunListeners listeners = getRunListeners(args);
//監(jiān)聽相應(yīng)的事件,SpringApplicationEvent下的一個實現(xiàn)
listeners.starting();
try {
//提供了對于運行SpringApplication參數(shù)的訪問
ApplicationArguments applicationArguments = new DefaultApplicationArguments(
args);
//環(huán)境配置:是servlet,reactive或者java應(yīng)用環(huán)境,觸發(fā)evn準備好的事件
ConfigurableEnvironment environment = prepareEnvironment(listeners,
applicationArguments);
configureIgnoreBeanInfo(environment);
Banner printedBanner = printBanner(environment);
context = createApplicationContext();
exceptionReporters = getSpringFactoriesInstances(
SpringBootExceptionReporter.class,
new Class[] { ConfigurableApplicationContext.class }, context);
prepareContext(context, environment, listeners, applicationArguments,
printedBanner);
refreshContext(context);
afterRefresh(context, applicationArguments);
stopWatch.stop();
if (this.logStartupInfo) {
new StartupInfoLogger(this.mainApplicationClass)
.logStarted(getApplicationLog(), stopWatch);
}
listeners.started(context);
callRunners(context, applicationArguments);
}
catch (Throwable ex) {
handleRunFailure(context, ex, exceptionReporters, listeners);
throw new IllegalStateException(ex);
}

try {
listeners.running(context);
}
catch (Throwable ex) {
handleRunFailure(context, ex, exceptionReporters, null);
throw new IllegalStateException(ex);
}
return context;
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot+vue實現(xiàn)驗證碼功能

    springboot+vue實現(xiàn)驗證碼功能

    這篇文章主要為大家詳細介紹了springboot+vue實現(xiàn)驗證碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • springboot亂碼問題排查思路解析

    springboot亂碼問題排查思路解析

    這篇文章主要為大家介紹了springboot亂碼問題排查思路解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • java學生信息管理系統(tǒng)設(shè)計(2)

    java學生信息管理系統(tǒng)設(shè)計(2)

    這篇文章主要為大家詳細介紹了java學生信息管理系統(tǒng)設(shè)計,學生信息添加進入數(shù)據(jù)庫的事務(wù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java CompletableFuture使用方式

    Java CompletableFuture使用方式

    這篇文章主要介紹了Java CompletableFuture使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringBoot集成redis與session實現(xiàn)分布式單點登錄

    SpringBoot集成redis與session實現(xiàn)分布式單點登錄

    這篇文章主要介紹了SpringBoot集成redis與session實現(xiàn)分布式單點登錄,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • MyBatis加解密插件的示例詳解

    MyBatis加解密插件的示例詳解

    本文介紹了使用?MyBatis?插件實現(xiàn)數(shù)據(jù)庫字段加解密的探索過程,實際開發(fā)過程中需要注意的細節(jié)比較多,整個流程下來我對?MyBatis?的理解也加深了,對MyBatis加解密插件感興趣的朋友跟隨小編一起看看吧
    2022-08-08
  • StringUtils,CollectionUtils判斷為空的方法和原生代碼哪個效率最高

    StringUtils,CollectionUtils判斷為空的方法和原生代碼哪個效率最高

    這篇文章主要介紹了StringUtils,CollectionUtils判斷為空的方法和原生代碼哪個效率最高,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java8 forEach結(jié)合Lambda表達式遍歷 List操作

    java8 forEach結(jié)合Lambda表達式遍歷 List操作

    這篇文章主要介紹了java8 forEach結(jié)合Lambda表達式遍歷 List操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • JDK8?中Arrays.sort()?排序方法詳解

    JDK8?中Arrays.sort()?排序方法詳解

    這篇文章主要介紹了JDK8?中Arrays.sort()?排序方法解讀,本文先行介紹Arrays.sort()中影響排序方式的幾個因素,影響因素主要為數(shù)組類型、數(shù)組大小,結(jié)合閾值對排序方式進行選擇,需要的朋友可以參考下
    2023-05-05
  • logback的UNDEFINED_PROPERTY屬性源碼執(zhí)行流程解讀

    logback的UNDEFINED_PROPERTY屬性源碼執(zhí)行流程解讀

    這篇文章主要為大家介紹了logback的UNDEFINED_PROPERTY屬性源碼執(zhí)行流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11

最新評論