本人為初學者,對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的功能,動態載入配置...