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。
- Spring 容器从加载文件到创建一个完整Bean的工作流程
- (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
- 一个完整的Windows 服务从创建到安装卸载
- Spring 容器创建bean的scope
- spring容器创建bean对象的方式
- Spring 容器--如何创建和加载一个 Spring 容器?
- 流程图解Spring Framework(一) spring 如何创建一个Bean的
- Spring基本用法<一>:从Spring起源,bean的创建到IoC/依赖注入
- spring容器中的bean创建
- 【Spring从入门到精通】 (五)加载Bean
- Spring源码之bean的加载(五)准备创建bean
- Spring容器中bean的初始化和销毁工作
- spring MVC 容器加载bean的一些实践
- 从spring容器中直接取bean的方法
- 从Spring容器中获取bean的几种方式
- Spring源码分析之Bean的加载流程
- 利用spring的测试组建,从spring容器中取得bean,并测试bean
- spring加载xml文件 读取bean时遇到的一个问题
- JSP编译指令和动作指令基本知识点
- iOS 关于音频开发
- C语言的那些事——函数部分(5)
- 我们将要做什么
- 数据库dblink设置错误
- Spring 容器从加载文件到创建一个完整Bean的工作流程
- 文件编码格式设置
- 解决ViewPager与HorizontalScrollView 冲突
- SSH connection refused的问题解决方法
- oracle 11g RAC节点剔除诊断思路
- 同余概述
- 我希望在一个公司呆到好长
- CBATTRequest Class Reference
- 白酒行业网络营销分析及思路