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陣列,每乙...