![](https://img.haomeiwen.com/i7130067/31773aafb6260556.png)
BeanFactory是ioc容器的基础,提供了最基本的检索方法,具体的实现类才能发现ioc容器真正的是怎么样的。AutowireCapableBeanFactory继承了BeanFactory,然后找了的抽象的实现类 AbstractAutowireCapableBeanFactory,最终找到了最简单的ioc容器的实现类XmlBeanFactory。从XmlBeanFactory就能找到我们所需要的bean是怎么一步步的加载到Ioc容器里的。
![](https://img.haomeiwen.com/i7130067/9d5fdde3bb113ed9.png)
XmlBeanFactory只是提供了加载资源的入口,具体的加载过程交给XmlBeanDefinitionReader来做,这里就是一个最佳的实践:面向对象编程,具体的类做具体的事情,把过程操作抽象出一个对象来。
![](https://img.haomeiwen.com/i7130067/da9f5c0585252b34.png)
![](https://img.haomeiwen.com/i7130067/867e5d7c92867b27.png)
doLoadDocument可以理解为解析xml的过程,比如常用的dom4j是解析,当然spring用的是它自己的解析xml技术,因为我们关心的是bean如何加载的ioc容器里面的,所有这一步过程直接抽象doLoadDocument就当作解析xml获取Document的过程。我们直接关注registerBeanDefinitions这个方法就好了。
![](https://img.haomeiwen.com/i7130067/2132d2a1b3f181c5.png)
![](https://img.haomeiwen.com/i7130067/14d1c4e7596b752f.png)
![](https://img.haomeiwen.com/i7130067/8e9434c4e40f859b.png)
总结:new XmlBeanFactory的过程就是将xml解析,解析到beanDefinition这样的数据结构,最后把它全部以beanName-beanDefinition的方式放到Map里。
![](https://img.haomeiwen.com/i7130067/99ff3eecd9520f19.png)
网友评论