今天先来死磕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);
}
}




