XML的解析流程
举例
我们先有一个学生类
然后我们在xml里面声明这个学生类的bean
写一个简单的test1,运行 结果出来了
xml解析的入口
1.我们进入test1里面的ClassPathXmlApplicationContext方法中,如下图
点击箭头的方法,进入
这个refresh()就是重要的spring核心方法,是spring初始化容器的核心流程。所有的bean的初始化都是在这里完成的。
refresh()方法流程分析
直接看图吧,这里先大概看看。我们只要关注第二步的代码就可以了。
真正的xml解析流程开始
点击第二步的obtainFreshBeanFactory()方法
这里按住alt+ctrl左键,选择第一个方法点进去
前面不具体看 ,我们直接进第5步里面。点击alt+ctrl+左键进去
看完这里的话 直接进第4步。
继续点进去。
这里我们记一下 有第4步和第7步的选择
点击第4步
在点箭头指的方法
我们选择第三个,如果我们点第7步
我们都进第三个方法
public int loadBeanDefinitions(EncodedResource encodedResource) throws BeanDefinitionStoreException {
Assert.notNull(encodedResource, "EncodedResource must not be null");
if (logger.isTraceEnabled()) {
logger.trace("Loading XML bean definitions from " + encodedResource);
}
//1.声明一个Set<EncodedResource>
Set<EncodedResource> currentResources = this.resourcesCurrentlyBeingLoaded.get();
if (!currentResources.add(encodedResource)) {
throw new BeanDefinitionStoreException(
"Detected cyclic loading of " + encodedResource + " - check your import definitions!");
}