亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Boot啟動(dòng)流程斷點(diǎn)過(guò)程解析

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

這篇文章主要介紹了Spring Boot啟動(dòng)流程斷點(diǎn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

啟動(dòng)入口

跟進(jìn)run方法 : 一個(gè)用來(lái)使用默認(rèn)的配置從特定的源運(yùn)行SpringApplication的靜態(tài)幫助類。

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

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

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

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

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

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

4.運(yùn)行SpringApplication的run方法

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

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

Spring Boot找到main方式的方式

通過(guò)拋異常的形式來(lái)獲取堆棧信息,再獲取啟動(dòng)類的信息。

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

/**
* Run the Spring application, creating and refreshing a new
* {@link ApplicationContext}.
* 運(yùn)行一個(gè)Spring應(yīng)用,創(chuàng)建和刷新一個(gè)新的ApplicationContext
* @param args the application arguments (usually passed from a Java main method)
* 應(yīng)用參數(shù)通過(guò)java main方法傳遞過(guò)來(lái)
* @return a running {@link ApplicationContext}
*/
public ConfigurableApplicationContext run(String... args) {
// 任務(wù)計(jì)時(shí)器工具,可同時(shí)計(jì)數(shù)多個(gè)任務(wù)
StopWatch stopWatch = new StopWatch();
stopWatch.start();
//ApplicationContext是Spring的中心接口,為應(yīng)用提供配置:1bean工廠2加載資源3注冊(cè)的監(jiān)聽(tīng)器發(fā)布事件4解析消息
ConfigurableApplicationContext context = null;
Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList<>();
//headless 模式:服務(wù)器端模式,表示系統(tǒng)沒(méi)有鍵盤(pán)鼠標(biāo)等前端應(yīng)用
configureHeadlessProperty();
//監(jiān)聽(tīng)器容器,對(duì)run方法各個(gè)階段事件進(jìn)行監(jiān)聽(tīng),觀察者模式
SpringApplicationRunListeners listeners = getRunListeners(args);
//監(jiān)聽(tīng)相應(yīng)的事件,SpringApplicationEvent下的一個(gè)實(shí)現(xiàn)
listeners.starting();
try {
//提供了對(duì)于運(yùn)行SpringApplication參數(shù)的訪問(wèn)
ApplicationArguments applicationArguments = new DefaultApplicationArguments(
args);
//環(huán)境配置:是servlet,reactive或者java應(yīng)用環(huán)境,觸發(fā)evn準(zhǔn)備好的事件
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;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    springboot亂碼問(wèn)題排查思路解析

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

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

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

    Java CompletableFuture使用方式

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

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

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

    MyBatis加解密插件的示例詳解

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

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

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

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

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

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

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

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

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

最新評(píng)論