手擼簡易spring框架(二)

2021-10-21 19:51:02 字數 2490 閱讀 9125

private

void

refresh()

throws exception

完成beandefinitionreader中的構造方法,流程分為三步走:

/**儲存了所有bean的classname*/

private list

registybeanclasses =

newarraylist

<

>()

;public

beandefinitionreader

(string.

.. locations)

catch

(ioexception e)

//3.掃瞄,掃瞄資源檔案(class),並儲存到集合中

doscanner

(config.

getproperty

(scan_package));

}

doscanner()是遞迴方法,當它發現當前掃瞄的檔案是目錄時要發生遞迴,直到找到乙個class檔案,然後把它的全類名新增到集合中

/**

* 掃瞄資源檔案的遞迴方法

*/private

void

doscanner

(string scanpackage)

else

string classname =

(scanpackage +

"."+ file.

getname()

.replace

(".class",""

));//classname儲存到集合

registybeanclasses.

add(classname);}

}}

private

void

refresh()

throws exception

回到beandefinitionreader中填充loadbeandefinitions()方法。邏輯是:掃瞄class集合,如果是被@component註解的class則需要封裝成beandefinition,表示著它將來可以被ioc進行管理。

/**

* 把配置檔案中掃瞄到的所有的配置資訊轉換為beandefinition物件

*/public list

loadbeandefinitions()

annotation[

] annotations = beanclass.

getannotations()

;if(annotations.length ==0)

for(annotation annotation : annotations)

break;}

}}}catch

(exception e)

return result;

}/**

* 相關屬性封裝到beandefinition

*/private beandefinition docreatebeandefinition

(string factorybeanname, string beanclassname)

/** * 將單詞首字母變為小寫

*/private string tolowerfirstcase

(string ******name)

beandefinition主要儲存兩個引數,factorybeanname和beanclassname,乙個是儲存實現類的類名(首字母小寫)或其介面全類名,另乙個是儲存實現類的全類名,如下圖所示。通過儲存這兩個引數我們可以實現用類名或介面型別來依賴注入。

將beandefinition儲存為以factorybeanname為key的map

//儲存factorybean和beandefinition的對應關係

private

final map

beandefinitionmap =

newconcurrenthashmap

<

>()

;private

void

refresh()

throws exception

private

void

doregisterbeandefinition

(list

beandefinitions)

throws exception

beandefinitionmap.

put(beandefinition.

getfactorybeanname()

, beandefinition);}

}

手擼php框架2 1 使用測試框架phpunit

測試驅動開發,雖然我接觸這個開發方式不久,但我還是想應用到我們的專案中來。好了,不多說,開幹。我們使用的測試框架是 phpunit 1.phpunit安裝 在composer.json檔案的require dev下,新增 phpunit phpunit 6.5.0 使用哪個版本,需要根據php版本和...

手擼php框架3 2 構建Tank類

作為在實際中使用的核心類,沒有什麼可說的,它直接繼承basetank類,如果需要新增什麼特性 完全可以在這裡寫。但是我們並沒有什麼新奇的想法,所以嘞,直接繼承了事!哦,我們在入口指令碼引入tank類時,是通過require或include直接引入tank.php檔案完成的。所以,我們可以在tank....

Spring框架總結 二

開發乙個簡單的spring專案 一 開發環境搭建 1 引入原始碼jar 3.0以前的版本含有依賴jar包,3.0以後只有spring的核心jar 包core的jar包 commons logging 1.1.3.jar spring beans 3.2.5.release.jar spring co...