springboot啟動時,就是有很簡單的一行**。那我們可以很清楚的看到這行**的主角便是
了,本文我們就來聊一聊這貨,來探尋springboot的一站式啟動流程。
public
class
});bootstrap.setbannermode(bannder.mode.console);
bootstrap.run(args);}}
public
class
public
(object source, string... args)
, args)
; }
public
(object sources, string args)
}
private
static
final string web_environment_classes =
this.webenvironment = deducewebenvironment(); // 1
setinitializers((collection) getspringfactoriesinstances(
}private
boolean
deducewebenvironment
() }
return
true;
}private
collection extends t> getspringfactoriesinstances(classtype) );}
public
void
setinitializers
(public
void
setlisteners
推斷並設定main方法的定義類(**中標記4處)。
(string... args)
return context;
}catch (throwable ex)
}private configurableenvironment prepareenvironment
( return environment;
}private
void
preparecontext
// add boot specific singleton beans
if (printedbanner != null)
// load the sources
setsources = getsources();
assert.notempty(sources, "sources must not be empty");
load(context, sources.toarray(new object[sources.size()])); // 11
listeners.contextloaded(context); // 12
}private
void
refreshcontext
catch (accesscontrolexception ex)
}}接著,建立和配置當前springboot應用將要使用的environment(包括配置要使用到的propertysource
和profile
)(**標記3處).
根據條件來決定是否使用自定義的beannamegenerator
,決定是否使用自定義的resourceloader
(**標記8處)。
然後再根據條件來決定是否需要新增shutdownhook
(**標記14處)。
經過以上的這些步驟以後,乙個完整的springboot應用就啟動完畢了!整個過程雖然看起來冗長無比,但其實很多都是一些事件通知的擴充套件點,如果我們將這些邏輯暫時的忽略掉的話,那整個springboot應用啟動的邏輯就可以壓縮到極其精簡的幾步了,如下圖:
一站式電子商務
我是關注電子商務。但我偏電子。要時時提醒自己擅長的是it,自己是it人,而不是服裝行業或化妝品行業。至於賣影音的噹噹 賣數碼的京東 賣母嬰的紅孩子 賣化妝品的莎莎 賣居家的麥網,他們都是進貨賣貨,在網際網路這個世界充當國美蘇寧之類的角色。他們挾巨大的投資來打巨大的廣告吸引巨大的流量,然後和供貨商進行...
一站式程式設計筆記(17,18,19)
第17章 彙編器把文字檔案轉換成目標檔案.o 目標檔案由若干個section組成,我們在匯程式設計序中宣告的.section會成為目標檔案中的section 然後鏈結器把目標檔案的section合併成幾個segment,生成可執行檔案。最後載入器根據可執行檔案的segment資訊載入執行這個程式。第...
微服務一站式開發
十年前左右,我去公司面試時,面試官問我的第乙個問題是讓我簡要介紹下軟體設計中的三層設計模型 表示層 業務邏輯處理層 資料訪問層 儘管在軟體設計過程中,架構師或者程式設計者遵守了流行一時的經典的三層模型,但由於並未按照業務場景進行劃分,使得最終的系統應用將所有的業務場景的表示層 業務邏輯處理層 資料訪...