Spring 容器从加载文件到创建一个完整Bean的工作流程
2013-10-21 21:51
531 查看
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。
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。
相关文章推荐
- (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
- (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
- Spring IOC容器分析(4) -- bean创建获取完整流程
- 通过DefaultListableBeanFactory加载.xml配置文件学习Spring-IoC容器注册/加载bean的机制(源码走读)
- Spring源码分析:Bean加载流程概览及配置文件读取
- Spring源码分析:Bean加载流程概览及配置文件读取
- Spring 源码分析:Bean 加载流程概览及配置文件读取
- spring学习教程7-spring容器创建bean对象的方式以及如何处理多个spring配置文件
- Spring 创建 IOC 容器时加载配置文件的几种方式
- 流程图解Spring Framework(一) spring 如何创建一个Bean的
- Spring 容器--如何创建和加载一个 Spring 容器?
- Spring 如何初始化一个容器,( 加载xml 文件 )
- 通过web.xml文件自动启动spring容器加载对应的配置文件
- Spring配置文件加载流程
- spring通过配置文件创建bean
- 其他信息: Error creating context 'spring.root': 未能加载文件或程序集“EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项
- 将属性文件加载道spring容器中
- 一个spring 基本知识的微博(怎么加载多个xml、多个property文件、aop配置、监视器)
- Spring学习(三)使用Spring容器创建bean
- 【Spring源码分析】Bean加载流程概览(转)