ioc 容器 (1)

ioc 容器 (1)_第1张图片
引用了《spring技术内幕》中 ioc的设计图

BeanFactory是ioc容器的基础,提供了最基本的检索方法,具体的实现类才能发现ioc容器真正的是怎么样的。AutowireCapableBeanFactory继承了BeanFactory,然后找了的抽象的实现类 AbstractAutowireCapableBeanFactory,最终找到了最简单的ioc容器的实现类XmlBeanFactory。从XmlBeanFactory就能找到我们所需要的bean是怎么一步步的加载到Ioc容器里的。


ioc 容器 (1)_第2张图片

XmlBeanFactory只是提供了加载资源的入口,具体的加载过程交给XmlBeanDefinitionReader来做,这里就是一个最佳的实践:面向对象编程,具体的类做具体的事情,把过程操作抽象出一个对象来。


ioc 容器 (1)_第3张图片
重点看doLoadBeanDefinitions
ioc 容器 (1)_第4张图片
doLoadBeanDefinitions将xml转换为Document

doLoadDocument可以理解为解析xml的过程,比如常用的dom4j是解析,当然spring用的是它自己的解析xml技术,因为我们关心的是bean如何加载的ioc容器里面的,所有这一步过程直接抽象doLoadDocument就当作解析xml获取Document的过程。我们直接关注registerBeanDefinitions这个方法就好了。


ioc 容器 (1)_第5张图片
直接看注解:创建解析器类的新实例并调用 ,把全部bean的注册直接交给了BeanDefinitionDocumentReader,具体实现交给DefaultBeanDefinitionDocumentReader


ioc 容器 (1)_第6张图片
parseBeanDefinitions的过程就是区分IMPORT_ELEMENT ALIAS_ELEMENT BEAN_ELEMENT同时把bean放在beanDefinitionsMap里


总结:new XmlBeanFactory的过程就是将xml解析,解析到beanDefinition这样的数据结构,最后把它全部以beanName-beanDefinition的方式放到Map里。


ioc 容器 (1)_第7张图片

你可能感兴趣的:(ioc 容器 (1))