死磕spring源码spring配置文件的加载流程
Posted 胡金水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了死磕spring源码spring配置文件的加载流程相关的知识,希望对你有一定的参考价值。
今天先来死磕spring
配置文件的加载流程:
AbstractApplicationContext #refresh-》
AbstractApplicationContext #obtainFreshBeanFactory-》
AbstractRefreshableApplicationContext #refreshBeanFactory-》
XmlWebApplicationContext #loadBeanDefinitions-》
AbstractBeanDefinitionReader #loadBeanDefinitions-》
XmlBeanDefinitionReader #loadBeanDefinitions-》#doLoadBeanDefinitions-》#registerBeanDefinitions-》
DefaultBeanDefinitionDocumentReader #registerBeanDefinitions-》 #doRegisterBeanDefinitions-》#parseBeanDefinitions-》parseDefaultElement
以上七步就是从spring
的入口到解析xml
配置文件,如果看到parseDefaultElement
这个方法,那么恭喜你,已经看到希望了,可以看下具体源码:
public static final String IMPORT_ELEMENT = "import";
public static final String ALIAS_ELEMENT = "alias";
public static final String BEAN_ELEMENT = "bean";
public static final String NESTED_BEANS_ELEMENT = "beans";
private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) {
if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) {//解析import标签
importBeanDefinitionResource(ele);
}
else if (delegate.nodeNameEquals(ele, ALIAS_ELEMENT)) {//解析alias
processAliasRegistration(ele);
}
else if (delegate.nodeNameEquals(ele, BEAN_ELEMENT)) {//解析bean
processBeanDefinition(ele, delegate);
}
else if (delegate.nodeNameEquals(ele, NESTED_BEANS_ELEMENT)) {//解析beans
// recurse
doRegisterBeanDefinitions(ele);
}
}
以上是关于死磕spring源码spring配置文件的加载流程的主要内容,如果未能解决你的问题,请参考以下文章