Spring容器高级主题
来源:互联网 发布:淘宝有什么好的男鞋店 编辑:程序博客网 时间:2024/04/30 20:24
5.1 Spring容器技术内幕
5.1.1 内部工作机制
Spring的AbstractApplicationContext是ApplicationContext抽象实现类,该抽象类的refresh()方法定义了Spring容器在加载配置文件后的各项处理过程,这些处理清晰刻画了Spring容器启动时所执行的各项操作。
代码清单 AbstractApplicationContext#refresh()
//1初始化BeanFactory
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
...//2调用工厂后处理器invokeBeanFactoryPostProcessors();//3注册Bean后处理器registerBeanPostProcessors();//4初始化消息源initMessageSource();//5初始化应用上下文事件广播器initApplicationEventMulticaster();//6初始化其他特殊的Bean:由具体子类实现onRefresh();//7注册事件监听器registerListeners();//8初始化所有单实例的Bean,使用懒汉模式的Bean除外finishBeanFactoryInitialization(beanFactory);//9完成刷新并发布容器刷新事件finishRefresh();
1、初始化BeanFactory:根据配置文件实例化BeanFactory,getBeanFactory()方法由具体子类实现。这一步,Spring将配置文件信息装入容器的Bean定义注册表(BeanDefinitionRegistry)中,此时Bean还未初始化。
2、调用工厂后处理器:根据反射机制从BeanDefinitionRegistry中找出所有BeanFactoryPostProcessor类型的Bean,并调用其postProcessBeanFactory()接口方法;
3、注册Bean后处理:根据反射机制从BeanDefinitionRegistry中找出所有BeanPostProcessor类型的Bean,并将他们注册到容器Bean后处理的注册表中;
4、初始化消息源:初始化容器的国际化消息资源;
5、初始化应用上下文事件广播器;
6、初始化其他特殊的Bean:这是一个钩子方法,子类可以借助这个方法执行一些特殊操作:如AbstractRefreshableWebApplicationContext就使用该方法执行初始化ThemeSource的操作;
7、注册事件监听器;
8、初始化所有单实例的Bean,使用懒汉模式的Bean除外:初始化Bean后,将他们放入Spring容器的缓存中;
9、发布上下文刷新事件:创建上下文刷新事件,事件广播器负责将这些事件广播到每个注册的事件监听器中。
1、ResourceLoader从存储介质中加载Spring配置信息,并使用Resource表示这个配置文件的资源;
2、BeanDefinitionReader读取Resource所指向的配置文件资源,然后解析配置文件。配置文件中每一个<bean>解析成一个BeanDefinition对象,并保存到BeanDefinitionRegistry中;
3、容器扫描BeanDefinitionRegistry中的BeanDefinition,使用Java的反射机制自动识别出Bean工厂后处理器(实现BeanFactoryPostProcessor接口)的Bean,然后调用这些Bean工厂后处理器对BeanDefinitionRegistry中的BeanDefinition进行加工处理,主要完成两项工作:
1)对使用占位符的<bean>元素标签进行解析,得到最终配置值,意味着对一些半成品的BeanDefinition对象进行加工处理并得到成品的BeanDefinition对象;
2)对BeanDefinitionRegistry中的BeanDefinition进行扫描,通过Java反射机制找出所有属性编辑器的Bean(实现java.beans.PropertyEditor接口的Bean),并自动将他们注册到Spring容器的属性编辑器注册表中(PropertyEditorRegistry);
4、Spring容器从BeanDefinitionRegistry中取出加工后的BeanDefinition,并调用InstantiationStrategy着手进行Bean实例化的工作;
5、在实例化Bean时,Spring容器使用BeanWrapper对Bean进行封装,BeanWrapper提供很多以Java反射机制操作Bean的方法,将结合该Bean的BeanDefinition以及容器中属性编辑器,完成Bean属性的设置工作;
6、利用容器中注册的Bean后处理器(实现BeanPostProcessor接口的Bean)对已经完成属性设置工作的Bean进行后续加工,直接装配出一个准备就绪的Bean。
- Spring容器高级主题
- Spring容器高级主题
- Spring容器高级主题
- 4.spring容器高级主题
- Spring4学习:Spring容器高级主题
- 第三篇 小曹学spring--Spring容器高级主题
- spring3.x第五章 Spring容器高级主题
- Spring3.X学习笔记4-Spring容器高级主题
- Spring容器高级主题(Spring 3.x企业应用开发实战第五章)学习总结
- Spring容器高级主题(精通Spring+4.x++企业应用开发实战 五)
- Spring IoC容器高级特性
- spring学习笔记:ioc容器高级特性
- Spring框架学习【IoC容器高级特性】
- 高级主题
- DWR高级主题之DWR与spring集成
- DWR高级主题之DWR与spring集成
- 《Spring攻略》 第2章 高级Spring IoC容器
- Spring IoC之高级应用--使bean感知容器
- <7.24>新的启航 Android学习笔记(四)
- poj 1995 快速幂取模,核心是二分思想
- ls命令
- c++编码规范(二)
- cd命令
- Spring容器高级主题
- STL 算法
- 高质量的外链有哪些
- OSG学习之示例遇到的问题三无法打开文件osgGA/MatrixManipulator错误
- c++编码规范(三)
- linux下常用FTP命令 上传下载文件
- pwd命令
- Boost学习之CRC校验
- lvs基础学习