上一篇說完了加載xml
信息到Document
對(duì)象
源碼如下聂沙,接著上篇,開始registerBeanDefinitions(Document doc,Resource resource)
來到解析Document對(duì)象標(biāo)簽的核心邏輯
進(jìn)入 doRegisterBeanDefinitions.parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate)
方法
protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) {
if (delegate.isDefaultNamespace(root)) {
NodeList nl = root.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
Node node = nl.item(i);
if (node instanceof Element) {
Element ele = (Element) node;
//如果是默認(rèn)的(import,beans,bean ...)名稱空間則使用默認(rèn)的解析方法解析
if (delegate.isDefaultNamespace(ele)) {
parseDefaultElement(ele, delegate);
}
// 解析自定義信息(<tx :annotation-dri ven/> ..)
else {
delegate.parseCustomElement(ele);
}
}
}
}
else {
delegate.parseCustomElement(root);
}
}
其中會(huì)對(duì)默認(rèn)標(biāo)簽(import,bean,beans ...) 進(jìn)行默認(rèn)的標(biāo)簽解析 parseDefaultElement(ele,delegate)
以及對(duì)自定義標(biāo)簽的解析(<Context:annotation-config /> <tx:annotation-driver /> ..)
瘫寝,最后將得到BeanDefinition
通過BeanDefinitionRegistry.registerBeanDefinition()
方法將bean定義信息注冊到容器中蜒蕾,
其中通過BeanDefinitionParserDelegate
中的一系列方法將Xml中的屬性解析到AbstractBeanDefinition
類中