我们来看看DefaultBeanDefinitionDocumentReader怎么去了解这个妹子的。
@Override
public void registerBeanDefinitions(Document doc, XmlReaderContext readerContext) {
this.readerContext = readerContext;
logger.debug("Loading bean definitions");
Element root = doc.getDocumentElement();
// 正在干活的都是do方法
doRegisterBeanDefinitions(root);
}
那我们看看doRegisterBeanDefinition(root)方法
@Override
public void registerBeanDefinitions(Document doc, XmlReaderContext readerContext) {
this.readerContext = readerContext;
logger.debug("Loading bean definitions");
Element root = doc.getDocumentElement();
// 真正干活的都是do方法
doRegisterBeanDefinitions(root);
}
protected void doRegisterBeanDefinitions(Element root) {
// 专门处理解析xml元素,也就是对妹子深入了解的方法
BeanDefinitionParserDelegate parent = this.delegate;
this.delegate = createDelegate(getReaderContext(), root, parent);
// 解析前处理,比如你在妹子进行了解前,你得做点功课,这个得你自己实现
preProcessXml(root);
// 这个是深入了解妹子的过程
parseBeanDefinitions(root, this.delegate);
// 对这个妹子了解完后,你得考虑下一步怎么做
postProcessXml(root);
this.delegate = parent;
}
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;
if (delegate.isDefaultNamespace(ele)) {
// 默认空间调用parseDefaultElement
parseDefaultElement(ele, delegate);
}
else {
// 自定义空间解析
delegate.parseCustomElement(ele);
}
}
}
}
else {
delegate.parseCustomElement(root);
}
}
private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) {
// 对import标签进行解析
if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) {
importBeanDefinitionResource(ele);
}
// 对alias标签进行处理
else if (delegate.nodeNameEquals(ele, ALIAS_ELEMENT)) {
processAliasRegistration(ele);
}
// 对bean标签的处理
else if (delegate.nodeNameEquals(ele, BEAN_ELEMENT)) {
processBeanDefinition(ele, delegate);
}
// 对beans标签的处理
else if (delegate.nodeNameEquals(ele, NESTED_BEANS_ELEMENT)) {
// recurse
doRegisterBeanDefinitions(ele);
}
}
最重要的是bean的处理,毕竟bean才是妹子啊,其他的都是浮云。。。。。。。。。。。。。
protected void processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) {
// 对元素进行解析
BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele);
if (bdHolder != null) {
// 解析完后注册
getReaderContext().fireComponentRegistered(new BeanComponentDefinition(bdHolder));
}
}