一步一步看Spring如何加载XML文件首先我们来用ClassPathXmlApplicationContext来debug调试我们会遇到第一个方法setConfigLocations,这个方法的注释是设置这个应用的配置位置,我继续往下走,发现它就是解析了我的路径,然后把这个路径放到了configLocations数组里,总结下来这个方法就是解析配置的路径,初学的就跟我一样不要深究了,知道这个方法干了啥就好接下来我们继续debug,就到了refresh方法,进去之后方法长这样我们进去看看obtainFreshBeanFactory方法,这个方法的返回是一个beanFactory,可以把它当成一个容器,xml文件或者注解加载后,肯定是要存到beanFactory里面的.我们看到refreshBeanFactory方法,盲猜测一下里面的方法是有什么作用的hasBeanFactory 这个是放到if里面的,那么肯定返回值为布尔类型destroyBeans和closeBeanFactory这个两个方法一看方法名,我就认为一个是注销Bean,一个是关闭BeanFactory,那么如果这两个方法的作用是这样,那么hasBeanFactory的意思肯定是判断存不存在BeanFactory,如果存在BeanFactory的话,才需要注销和关闭吧.createBeanFactory这个方法一看就知道是创建BeanFactory的customizeBeanFactory这个我猜测是自定义BeanFactoryloadBeanDefinitions 这个是加载BeanDefinitions那我在想,如果我导入xml配置到容器里,会在哪一步执行呢,有可能是创建BeanFactory的时候执行,也有可能是加载BeanDefinitions的时候执行是吧,我们执行createBeanFactory方法看看可以看到createBeanFactory方法运行后,创建了一个BeanFactory出来,但是beanFactory里面的数据都是默认值null或者0接下来我们在执行loadBeanDefinitions方法看看可以看到在执行完loadBeanDefinitions方法后,它把我xml文件里面的Bean数据放进来了那我们现在就重新debug,去看看loadBeanDefinitions方法到底做了些什么操作我们进去看看里面到底有什么逻辑,我还是老办法,先看注释,在看方法名,猜测其含义通过图里面一看,大致知道核心的方法,不是initBeanDefinitionReader就是loadBeanDefinitions方法,我们一个一个进去看看当我点进去initBeanDefinitionReader方法看的时候,我就知道这个方法不是我要找的加载配置的方法,因为只有一行,还是set接下来我们进去看loadBeanDefinitions方法应该很明朗了,看判断就知道了,configResources返回为空,所以第一个判断不符合,第二个判断configLocations里面有值,是我写的配置文件的值,所以我们直接进去进去后长这样,不用说,肯定知道要进去哪个方法了一直点进去点进去后,进入如下方法 XmlBeanDefinitionReader.loadBeanDefinitions方法这里我要说明一点,如果你看到do开头的方法,那你要重视了,因为这个方法里写的是实际的操作逻辑我们进去registerBeanDefinitions我刚刚说了do开头的方法要注意,我们进去doRegisterBeanDefinitions 看看最主要的还是我标注的三个方法,我们首先来猜猜都是干什么用的preProcessXml : 看方法名就是 xml过程之前parseBeanDefinitions: 看方法就是解析BeanDefinitinospostProcessXml: 看方法就是 xml过程之后看完我蹩脚的翻译,我大致认为,一个之前的方法,和一个之后的方法,中间那个是解析的方法点进去之前的方法可以看到,之前和之后两个方法里面啥也没有,预计是用来扩展用的,我们直接去看parseBeanDefinitions方法根据断点来看,是不是在循环获取我们的xml文件了,你看里面又有beans,beans里面又有bean标签,就知道是读取xml配置文件的方法了,记录一下DefaultBeanDefinitionDocumentReader类里面的parseBeanDefinitions方法我们继续来解析最后一级的元素parseDefaultElement可以看到这有一些判断,判断是否是bean节点还是import节点等等,我们直接进去看processBeanDefinition方法做了些啥可以看到我在xml里面写的bean为student已经解析出来了这就是spring加载xml配置的流程总结我一步一步学习源码随便把东西分享一下,因为我发现,我自己一个人看,看一会就昏昏欲睡,但是我边debug边写文章分享,脑子里的思路就很清晰,这样就挺好的摘要:一步一步看Spring如何加载XML文件首先我们来用ClassPathXmlApplicationContext来debug调试我们会遇到第一个方法setConfigLocations,这个方法的注释是设置这个应用的配置位置,我继续往下走,发现它就是解析了我的
来源:生物小黑板
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!