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...