spring原始碼 例項化bean的準備工作

2021-10-06 17:51:26 字數 2193 閱讀 7597

初始化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宣告式...