初始化annotatedbeandefinitionreader
初始化classpathbeandefinitionscanner
將配置類註冊到beandefinitionmap中
public
(class<
?>..
. annotatedclasses)
這個構造方法中,refresh()這個方法是spring初始化例項化bean的;this()和register(annotatedclasses);分別是初始化spring預設自帶的後置處理器和將配置類注入到beandefinitionmap中
public()
關於this()方法,裡面只有兩行**,我對著兩行**完成的工作,在注釋中,做了詳細的介紹;就不再敘述了
void
doregisterbean
(class
annotatedclass,
@nullable supplier
instancesupplier,
@nullable string name,
@nullable class<
?extends
annotation
>
qualifiers, beandefinitioncustomizer.
.. definitioncustomizers)
abd.
setinstancesupplier
(instancesupplier)
; scopemetadata scopemetadata =
this
.scopemetadataresolver.
resolvescopemetadata
(abd)
;//新增類的作用域
abd.
setscope
(scopemetadata.
getscopename()
);string beanname =
(name != null ? name :
this
.beannamegenerator.
generatebeanname
(abd,
this
.registry));
annotationconfigutils.
processcommondefinitionannotations
(abd);if
(qualifiers != null)
else
if(lazy.
class
== qualifier)
else}}
for(beandefinitioncustomizer customizer : definitioncustomizers)
//beandefinitionholder也是一種資料結構 先暫時認為definitionholder比beandefinition儲存的資訊更為豐富
beandefinitionholder definitionholder =
newbeandefinitionholder
(abd, beanname)
; definitionholder = annotationconfigutils.
(scopemetadata, definitionholder,
this
.registry)
;/**
* 這是是把建立的definitionholder註冊到registry
* * 內部呼叫的是defautlistablebeanfactory.registerbeandefinition()方法
*/beandefinitionreaderutils.
registerbeandefinition
(definitionholder,
this
.registry)
;}
這裡之所以將配置類,加入到beandefinitionmap中,我覺得是因為在後面掃瞄bean的時候,需要用到配置類中的@componentscan註解,所以,在之前,先將配置類新增到beandefinitionmap中
這是這兩個方法的解析和學習,後面的文章中,我們來看refresh完成的工作
spring原始碼分析 堆記憶體中建立bean物件
bean的生命週期中首先是在記憶體中開闢儲存空間,然後反射建立物件,建立物件後,依賴注入,設定bean的屬性,初始化bean,最後 放入快取中,返回bean物件,這裡我們分析一下第一步,bean的建立 準備工作 建立乙個student類,新增註解component component student...
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...
spring原始碼解析
spring源 解析 一 ioc容器 spring源 解析 二 ioc容器在web容器中的啟動 spring源 解析 三 spring jdbc spring源 解析 四 spring mvc spring源 解析 五 spring aop獲取proxy spring源 解析 六 spring宣告式...