Spring源码解析三——IOC容器的初始化过程

简单来说,IOC容器的初始化是由refresh()方法来启动的,这个方法标志着IOC容器的正式启动,具体来说,这个启动包括——

  1. BeanDefinition的Resource定位;
  2. BeanDefinition的载入;
  3. Bean Definition的注册

Spring中把上面三个过程分开,使用不同的模块;使用相应的ResourceLoader,BeanDefinitionReader等模块;

第一个过程是Resource的定位,由ResourceLoader通过统一的Resource接口来完成;这个Resource接口对各种形式的BeanDefinition的使用都提供了统一接口,

第二个过程是BeanDefiniton的载入;主要工作是将Resource进行解析,表示成IOC内部的数据结构——BeanDefinition,方便IOC容器统一的对Bean进行管理 

第三个过程是向IOC容器注册这些BeanDefinition, 这个过程是调用BeanDefinitionRegistry接口的实现来完成的;将解析得到的BeanDefinition注册到一个HashMap中去;

 BeanDefinition的Resource定位

编程方式使用DefaultListableBeanFactory时,首先定义一个Resource来定位容器使用的BeanDefinition资源;从而使得Spring可以在类路径中去寻找以文件形式存在的BeanDefinition信息——

ClassPathResource res=new ClassPathResource(“beans.xml”)

定义了Resource对象之后,Spring通过BeanDefinitionReader来对这些信息进行处理,——这里可以看出ApplicationContext和直接使用BeanFactory的区别:ApplicationContext已经默认实现了一些常用的BeanDefinitionReader的实现,而BeanFactory需要为期配置读取器的实现才可以;

具体的Resource解析由getResource()方法实现;

 

BeanDefinition的载入和解析

BeanDefinition的解析是把定义的BeanDefinition转化成一个Spring内部表示的数据结构的过程;具体分为两部分——解析XML文件得到document对象,然后解析document对象生成BeanDefinition;

解析的结果由BeanDefinitionHolder来实持有,

具体方法在BeanDefinitonReader.loadBeanDefinitions()中完成;

 

BeanDefinition在IOC容器中的注册

 

你可能感兴趣的:(Spring源码解析三——IOC容器的初始化过程)