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