Spring Boot原始碼簡析 二

2021-08-14 21:46:20 字數 2132 閱讀 6384

load 資源過程

load(context, sources.toarray(new object[sources.size()]));
load主要就是把我們傳入的資源生成相應的beandefinition。

protected

void

//建立乙個beandefinitionloader,看名字就知道使用來載入bean資訊的

beandefinitionloader loader = createbeandefinitionloader(

getbeandefinitionregistry(context), sources);

//塞乙個beannamegenerator

if (this.beannamegenerator != null)

//塞乙個resourceloader,用來先載入資源然後再解析

if (this.resourceloader != null)

if (this.environment != null)

//開始載入

loader.load();

}

這裡主要是先建立了乙個beandefinitionloader並在載入前做了一些準備工作,然後執行載入操作。

public

intload()

return count;

}private

intload(object source)

if (source instanceof resource)

if (source instanceof package)

if (source instanceof charsequence)

throw

new illegalargumentexception("invalid source type " + source.getclass());

}

此處是根據傳入的資源型別來載入資源,下面根據具體的資源型別來檢視資源載入資源

load class

private int load(class<?> source)  dsl can contribute beans here

if (groovybeandefinitionsource.class.isassignablefrom(source))

}//檢視元素是否有@component註解

if (iscomponent(source))

return

0;}

這裡就是將我們傳入的類建立對應的beandefinition並註冊到registry中去。

load resource

private

intload(resource source)

return

this.groovyreader.loadbeandefinitions(source);

}//呼叫xmlreader來載入beandefinition

return

this.xmlreader.loadbeandefinitions(source);

}

這裡可以很明顯看到,通過資源載入其實也就是我們平時使用xml配置,springboot是可以支援像spring一樣的通過配置檔案配置bean的方式。

load package

private

intload(package source)

這裡是我比較感興趣的地方,因為在spring沒有配置檔案的情況下,主要的bean載入的方式就應該是通過這個方法實現

protected setdoscan(string... basepackages) 

if (candidate instanceof annotatedbeandefinition)

if (checkcandidate(beanname, candidate)) }}

return beandefinitions;

}

總體來說,load的操作就是把使用者傳入的各種資源對應的bean的beandefinition資訊到註冊中心。

Sample BSP原始碼簡析

ifndef bsp h define bsp h include sdksample.h include filesystemlayer.h filesystemlayer.h 用來處理檔案系統的目錄 路徑等資訊 後面的mfslayer getconfigfilepath就是用了該檔案中定義的類。...

libc hashtable 原始碼簡析

本文分析的是 中截止至 2016 年 1 月 30 日最新的libc libc 中,hashtable的實現為鏈式結構。在教科書 introduction to algorithm 3rd edition 中,介紹的實現是由乙個陣列作為buckets,每個陣列中儲存乙個鍊錶。但是libc 中,使用乙...

HashMap原始碼簡析

hashmap 基於map介面實現的,允許使用null值和null鍵,但資料無序的.劃重點 執行緒不安全.若是想獲取乙個執行緒安全的hashmap,可用下面方法 map map collections.synchronizedmap new hashmap hashmap的主幹是entry陣列,每乙...