本篇仅简单介绍流程,具体的创建过程,由后续的源码解析部分进行详述。
总体流程图
简易版Spring Bean的创建过程如下图:
简单来讲,Bean的创建有下面几个过程:
- 解析Bean的定义构建BeanDefinition
- 对BeanDefinition进行增强
- 根据BeanDefinition创建Bean对象,其中包括对象的实例化和初始化两个阶段
Bean解析
我们可以使用XML,propertites,yam文件形式定义Bean,也可以在我们代码中以注解等方式定义Bean。那Spring的IOC容器是如何将这些Bean的定义转化为一个个Bean对象的呢?
Spring中基于BeanDefinitionReader接口提供多种解析器:
最终可以将Bean的不同定义,封装成一个统一的BeanDefinition对象,完成Bean定义的解析。
BeanDefinition
在构建出对Bean进行解释的BeanDefinition对象之后,BeanFactoryPostProcessor接口负责对Definition对象进行增强
对象创建
根据BeanDefinition,使用Java反射既可以构建出Bean,包括对象的实例化和属性的初始化两个阶段。
名词释义
在上面的流程图中,有两个比较接近的接口:
BeanFactoryPostProcessor:这个是对BeanDefinition对象进行增强
BeanPostProcesser:这个是对Bean本身进行增强
这两者的作用对象是不一样的。
另外在Spring中还有两个容易混淆的概念:
BeanFactory:这个是Spring的跟接口,是入口方法,也是Spring IOC容器的根接口。在使用Beanfactory创建对象时,必须遵循Bean完整的创建过程,这个过程是由Spring进行管控
FactoryBean: 不需要遵循Bean的完整创建过程,调用getObject就可以返回具体Bean,对象的创建过程是用户自己定义的,有更大的灵活性。