文章僅從原始碼的角度**springboot2.x的原理,不**使用。
我們知道springboot是靠著這段**進行啟動的。
public
static
void
main
(string[
] args)
分析原始碼的話,理所當然從這裡下手。
public
(class<
?>
primarysources, string[
] args)
public
(resourceloader resourceloader, class<
?>..
. primarysources)
下面看一下run方法,它的內容非常簡短:
(string.
.. args)
, context)
;this
.preparecontext
;this
.refreshcontext
(context)
;this
.afterrefresh
;// 計時器停止計時
stopwatch.
stop()
;if(this
.logstartupinfo)
listeners.
started
(context)
;this
.callrunners;}
catch
(throwable var10)
trycatch
(throwable var9)
}表面上看只有三十多行**,其實背後的**量是非常高的。
框架初始化分為:
配置資源載入器
配置primarysources(一般是我們的啟動類)
應用環境的檢測(springboot1.x版本有兩種環境,標準環境和web環境,spingboot2.x新增了一種reactive環境)
配置系統初始化器
配置應用***
配置main方法所在類
接著就是框架的基本啟動
計時器開始計時
headless模式賦值
配置環境模組
列印banner
建立應用上下文物件
初始化失敗分析器
關聯springboot元件與應用上下文物件
載入sources到context
重新整理上下文(完成bean的載入)
計時器停止計時
呼叫框架啟動擴充套件類
通過以上步驟完成基本的啟動,後面還有框架的自動化裝配的內容:
收集配置檔案中的配置工廠類
載入元件工廠
註冊元件內定義 bean
文字描述,可能不太直觀,這裡用圖示整體梳理一下:
下面一起扣細節吧。
Activity Intent深入解析
學習android sdk有段時間了,對activity intent的學習與使用都比較了解。第一次完整的學習activity intent後,我就感覺這似乎與windows com技術有些似曾相識的感覺,寫了一篇將activity 與 com 做了比較,但是一直感覺意猶未盡,前幾天在程式設計師雜誌...
深入解析IOCP
1.介紹 1.1 高併發伺服器 1 要求大規模的連線 會話可能同時進行 2 列子 web 伺服器,郵件伺服器 1.2 執行緒池架構 1 每個連線分配乙個執行緒,將導致過多的執行緒。2 執行緒消耗記憶體,比如堆疊等等。2.執行緒模型 2.1 基於會話模型 1 每個執行緒服務於乙個客戶端,比如http ...
HTTP 深入解析
1.cookie 儲存在客戶端 cookie 的類別 cookie 的屬性 了解 cookie 的應用場景 同源http請求 攜帶cookie 原生ajax請求方式 xhr.withcredentials true 支援跨域傳送cookies xhr.send jquery的ajax的post方法請...