SpringBoot原始碼分析2

2021-10-05 20:17:34 字數 3063 閱讀 9350

本人為初學者,對springboot原始碼的理解尚淺,若筆記有誤,歡迎各位讀者指正;

本人參考了大佬的文章 springboot2 | springboot啟動流程原始碼分析(一) ,其中對啟動流程步驟進行了七步劃分,覺得劃分得挺好,後續的文章也是會依此進行展開;

一、進入run方法

(string.

.. args)

, context)

;//第五步:準備容器

preparecontext

printedbanner)

;//第六步:重新整理容器

refreshcontext

(context)

;//第七步:重新整理容器後的擴充套件介面

afterrefresh

; stopwatch.

stop()

;if(this

.logstartupinfo)

listeners.

started

(context)

;callrunners;}

catch

(throwable ex)

trycatch

(throwable ex)

return context;

}springboot 啟動流程劃分的七步分別是:

1、獲取並啟動***

2、構造容器環境

3、建立容器

4、例項化springbootexceptionreporter.class

5、準備容器

6、重新整理容器

7、重新整理容器後的拓展介面

二、進入stopwatch類

概述三、第一步 | ***

概述

開啟***的作用:

1)獲取***

進入run方法

getrunlisteners

(args)

; listeners.

starting()

;首先通過 debug, 得到***為eventpublishingrunlistener, 其中listeners包含11個***:

進入getrunlisteners方法

接著,尋找***例項化的**

(string[

] args)

;return

new(logger,

getspringfactoriesinstances

class

, types,

this

, args));

}//進入getspringfactoriesinstances,在此類中對eventpublishingrunlistener進行例項化;

private

collection

getspringfactoriesinstances

(class

type, class<

?>

parametertypes, object.

.. args)

list

instances =

createspringfactoriesinstances

(type, parametertypes, classloader, args, names)

;// instances.size = 1;

annotationawareordercomparator.

sort

(instances)

;return instances;

}//進入createspringfactoriesinstances類 建立工廠類的例項化物件

//整個springboot 獲取 factories的方式統一如下:

private

list

createspringfactoriesinstances

(class

type, class<

?>

parametertypes,

classloader classloader, object[

] args, set

names)

catch

(throwable ex)

}return instances;

}***的邏輯處理過程是這樣的,springfactoriesloader.loadfactorynames(type, classloader))先獲得*** eventpublishingrunlistening 的名字,然後通過instanceclass.getdeclaredconstructor方法獲得構造器物件,最後呼叫工具類的instantiateclass方法,利用構造器物件例項化***類;

2)開啟***

listeners.starting();

開啟***會進入eventpublishingrunlistener 類的starting方法,

//eventpublishingrunlistener class

public

void

starting()

@override

public

void

multicastevent

(@nullable resolvabletype eventtype)

else}}

//利用給定的event呼叫***

protected

void

invokelistener

?catch

(throwable err)

}else}//

private

void

doinvokelistener

catch

(classcastexception ex)

}else

}}

SpringBoot原始碼分析

public class 第乙個引數 resourceloader 資源載入器 第二個引數 primarysources 載入的主要資源類 suppresswarnings public resourceloader resourceloader,class primarysources deduc...

Spring Boot 原始碼分析

1 專案初始化過程 springboot啟動類 springboot的啟動很簡單,如下 public static void main string args this.resourceloader resourceloader initialize sources private void ini...

spring boot原始碼分析

spring boot關鍵流程分析 進入preparecontext方法 轉化成beandefiniton類,註冊到spring 的beandefintionmap容器 enableautoconfigurationimportselector類,其父類裡面 這裡利用spring的功能,動態載入配置...