本文共 1466 字,大约阅读时间需要 4 分钟。
在完成对 BeanDefinition 的 Resource 定位之后,我们来了解整个 BeanDefinition 信息的载入过程.对IoC容器来说,载入过程相当于把定义的 BeanDefinition 在IoC容器中转化为一个Spring内部表示的数据结构的过程.IoC容器对Bean的管理和依赖注入功能的实现,是通过对其持有的BeanDefinition 进行各种骚操作来完成的.这些 BeanDefinition 数据在IoC容器中通过一个 HashMap 来保持和维护.
以 DefaultListableBeanFactory 的设计入手看看IoC容器如何完成 BeanDefinition 载入
对于容器的启动, refresh 是一个很重要的方法.该方法在 AbstractApplicationContext (它是 FileSystemXmlApplicationContext 的基类)中,详细地描述了整个 ApplicationContext 的初始化过程,比如 BeanFactory 的更新, MessageSource 和 PostProcessor 的注册...看起来像是对ApplicationContext 进行初始化的模板,这个执行过程为Bean的生命周期管理提供了条件.
BeanDefinition 在IoC容器中完成了载入和解析后,用户定义的 BeanDefinition 信息已经在IoC容器内建立起了自己的数据结构以及相应的数据表示,但此时这些数据还不能供IoC容器直接使用,需要在IoC容器中对这些 BeanDefinition 数据进行注册.这个注册为IoC容器提供了更友好的使用方式,在 DefaultListableBeanFactory 中,是通过一个 ConcurrentHashMap 来持有载入的 BeanDefinition 的.
将解析得到的 BeanDefinition 向IoC容器中的 beanDefinitionMap 注册的过程是在载入 BeanDefinition 完成后进行的,注册的调用过程如图
BeanDefinition 注册的实现
完成 BeanDefinition 的注册,就完成了IoC容器的初始化过程.此时,在使用的IoC容器 DefaultListableBeanFactory 中已经建立了整个 Bean 的配置信息,而且这些 BeanDefinition 已经可以被容器使用了,它们都在 beanDefinitionMap 里面被检索和使用.容器的作用就是对这些信息进行处理和维护.
这些信息是容器建立依赖反转的基础,有了这些基础数据,我们下面学习一下在IoC容器中,依赖注入是怎样完成的.
转载地址:http://ojvpa.baihongyu.com/