spring源码学习(三)解析beanDefinition----xml的解析
该方法是解析beanDefinition的入口,这个方法的调用链很长也很复杂
1)、创建beanDefinitionReader类
2)、设置环境参数,在后续调用的时候会用到
3)、设置实体解析器,这里的实体主要是指的xml配置文件内的标签
在加载实例化PluggableSchemaResolver这个类时,我们在debug调试的时候,在控制台会看到有个属性schemaMappings已经加载回来了,但是没有显示调用位置。辗转反侧查看后发现居然在toString里有过一次加载,很奇怪。我在有一篇随笔里专门写过这个情况。https://www.cnblogs.com/banzhuandang/p/16162922.html
4)、初始化beanDefinitionReader,在本类中是一个空的实现,可以在子类中进行扩展
loadBeanDefinition方法到真正的解析xml中的调用过程
xml的解析也分为两个部分
1)、默认命名空间下的节点解析,也就是beans命名空间
当节点名称是如下四个时,走各自的分支流程解析,这里边会涉及到一些递归调用,以及把解析到的beanDefinition注册到beanfactory中
2)、额外的命名空间的标签解析,这里边的子类实现很多,基本逻辑也和默认命令空间的标签解析一致。主要目的把xml中的每一个标签和属性解析到我们beanDefinition对象中,并注册到beanfactory