Spring Beans的注册创建过程

正如我们经常听说的,Spring创建Beans的过程是依赖倒置(Dependence Inversion),在不使用Spring的时候,创建一个Bean时,依赖的对象需要自己通过new ObjectA()的方式创建,有了Spring之后,这个依赖就反过来了,创建实例之前ObjectA对象就已经被Spring IoC容器创建好了,我们在创建依赖ObjectA对象的Bean时直接把这个对象拿过来用就可以了。Spring Beans的创建过程包括以下步骤:

1. IoC 容器创建

步骤:

  1. 容器帮我们创建启动ApplicationContext 工厂。
  2. 将配置的内容(如 spring-application.xml)给ApplicationContext 工厂。
    a. 调用父类容器的构造方法(super(parent)方法)为容器设置好Bean资源加载器
    b. 调用父类的setConfigLocations(configLocations)方法设置Bean定义资源文件的定位路径
    c. 调用父类的refresh()函数启动整个IoC容器对Bean定义的载入过程

经过对 Spring Bean 定义资源文件转换的 Document 对象中的元素层层解析,Spring IoC 现在已经将 XML 形式定义的 Bean 定义资源文件转换为 Spring IoC 所识别的数据结构——BeanDefinition。它是 Bean 定义资源文件中配置的 POJO 对象在 Spring IoC 容器中的映射,我们可以通过 AbstractBeanDefinition 为入口,向 IoC 容器进行索引、查询和操作。

2. IoC 容器配置信息解析注册

步骤:
向容器注册Bean定义信息,用于后续的依赖注入过程。

至此,Bean 定义资源文件中配置的 Bean 被解析过后,已经注册到 IoC 容器中,被 Spring 容器管理起来,真正完成了 IoC 容器初始化所做的全部工作。现 在 IoC 容器中已经建立了整个 Bean 的配置信息,这些 BeanDefinition 信息已经可以使用,并且可以被检索,IoC 容器的作用就是对这些注册的 Bean 定义信息进行处理和维护。这些的注册的 Bean 定义信息是 IoC 容器控制反转的基础,正是有了这些注册的数据,容器才可以进行依赖注入。

3. IoC 容器依赖注入

步骤:

  1. 生成 Bean 所包含的 Java 对象实例(这里是原始对象)。createBeanInstance
  2. 对 Bean 属性的依赖注入进行处理。populateBean
    a. 对原始对象的属性的注入过程
    b. 注入过程中解析属性值

Ref:
https://gitbook.cn/books/5ba0e192f4ce951299b4eeea/index.html

你可能感兴趣的:(Spring Beans的注册创建过程)