目录
- new XmlBeanDefinitionReader
- 接着往下执行这四个方法:
- loadBeanDefinitions(XmlBeanDefinitionReader)
- loadBeanDefinitions(String...)
- loadBeanDefinitions(String)
- loadBeanDefinitions(String,@Nullable Set《Resource》)
- loadBeanDefinitions(Resource...)
- loadBeanDefinitions(Resource)
- loadBeanDefinitions(EncodedResource)
- doLoadBeanDefinitions(InputSource ,Resource)
- 返回doLoadBeanDefinitions(InputSource ,Resource)
- registerBeanDefinitions
- 总结
方法图片:
首先执行第一个方法:
new XmlBeanDefinitionReader
这个方法 就是单纯的创建一个 XmlBeanDefinitionReader
接着往下执行这四个方法:
就看注释就行没什么太大意义
往下走 执行:
loadBeanDefinitions(XmlBeanDefinitionReader)
在这里插入图片描述
这个就是判断你是以什么路径加载进来的
我们是 走的第二条
我们在refresh之前 就设置了 这个属性 所以走的是第二条
再看一下他的属性值嘛:
然后往下执行:
loadBeanDefinitions(String…)
然后进来 ,在把数据转换从一个个的string 进行执行
loadBeanDefinitions(String)
关于那个actualResources参数的解释
loadBeanDefinitions(String,@Nullable Set《Resource》)
开始进行判断 是不是属于ResourcePatternResolver的子类
是的话开始进行将你传进来的string 转换从 Resource[]
关于 Resource 这个类的简介:
这是目前Resources的值
往下走:
loadBeanDefinitions(Resource…)
将 Resource…转换成 resource进行 解析:
往下走:
loadBeanDefinitions(Resource)
关于创建的 这个 类EncodedResource解释如下:
他的构造方法:就是读取时候你的xml编码格式,
loadBeanDefinitions(EncodedResource)
第一部分
这一部分 前面就是个 报错+日志打印
后面部分就是创建个HashSet 进行已加载的路径 如果出现一样的则报错
第二部分
这一部分就是获取流 然后你如果设置了 编码格式那就设置一下,没有的话就算了,然后执行下一个方法
doLoadBeanDefinitions(InputSource ,Resource)
然后进入doLoadDocument方法里面还有包装一下 在进入下一个方法:
进入里面后是这样的方法
解析文档里面父元素 子元素 属性啊等等这些信息 解析完成后:
返回doLoadBeanDefinitions(InputSource ,Resource)
registerBeanDefinitions
具体解释看注释 咱直接往下走:
再往下走:
parseDefaultElement
解析默认命名空间的:
里面有点多 有兴趣可以自己去看看
delegate.parseCustomElement
非默认的命名空间:
执行完上述两个方法前后:
执行之前 有一个参数是来记录信息的:
执行完之后
总结
从String[] -string-Resource[]- resource,最终开始将resource读取成一个document文档,根据文档的节点信息封装成一个个的BeanDefinition对象