Spring 容器从加载文件到创建一个完整Bean的工作流程

来源:互联网 发布:51软件测试培训 编辑:程序博客网 时间:2024/04/29 23:52

1、ResourceLoader从存储介质中加载Spring配置文件,并使用Resource表示这些配置文件的资源;

2、BeanDefinitionReader读取 Resource所指向的配置文件资源,然后解析配置文件。把配置文件中的每一个

<bean>解析成一个BeanDefinition对象,并存于BeanDefinitionRegistry中;

3、Spring容器会自动扫描BeanDefinitionRegistry中的BeanDefinition对象,利用Java反射机制识别出其中的

Bean工厂后处理器(即:实现BeanFactoryPostProcessor接口的Bean),然后调用这些Bean工厂后

处理器对BeanDefinitionRegistry中的BeanDefinition进行加工处理。主要完成以下两项加工操作:

(1)对使用到占位符的<bean>元素标签进行解析,得到最终配置项,这意味着对一些“半成品”的BeanDefinition

    对象进行加工处理并得到了成品的Beandefinition;

   (Ps:占位符使用与将XML中的某些需要动态设置的值,替换为占位键的值,增加了程序的灵活性,

通常Spring框架中,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类可以将

.properties(key/value形式)文件中一些动态设定的值(value),在XML中替换为占位该键($key$)的值,

.properties文件可以根据用户需求,自定义一些相关的属性参数

    classpath:/......是引用src目录下文件的写法)

(2)对BeanDefinitionRegistry中的BeanDefinition进行扫描,通过Java反射机制找出所有属性编辑器Bean(即:

    实现Java.beans.PropertyEditor接口的Bean),并自动将它们注册到Spring容器的(PropertyEditorRegistry)

    属性编辑器注册表中。

4、Spring容器从BeanDefinitionRegistry中取出加工后的BeanDefinition,并调用instantiationStrategy进行Bean的

实例化操作;

5、在instantiationStrategy实例化Bean的过程中,Spring容器用BeanWrapper对Bean进行封装,BeanWrapper提供

了许多通过Java反射机制来操作Bean的方法,它将结合该Bean的BeanDefinition以及容器中的PropertyEditorRegistry

属性编辑器,完成Bean属性的设置工作;

6、利用Spring容器中注册的Bean后处理器(实现BeanPostProcessor接口的Bean),对已经完成属性设置的Bean进行

后续加工,直接装配出一个准备就绪的Bean。

原创粉丝点击