spring IOC容器的扩展
在此之前已经完成了IOC对xml的解析和实例化工作,接下来需要分析Spring的高级版本对IOC容器的功能扩展:
代码分析如下:
synchronized (this.startupShutdownMonitor) {// 准备刷新上下文环境prepareRefresh();// 初始化BeanFactory,并进行XML文件的读取 之前大部分IOC的核心逻辑都在这里ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();//对BeanFactory进行各种功能填充prepareBeanFactory(beanFactory);try {// 留给子类进行服务覆盖和扩展的方法.postProcessBeanFactory(beanFactory);//激活各种BeanFactory处理器.invokeBeanFactoryPostProcessors(beanFactory);//激活Bean后处理器,在getBean时候调用,而BeanFactory后处理器是容器级别的,在此时就会被调用.registerBeanPostProcessors(beanFactory);//资源国际化处理.initMessageSource();// 初始化广播器,用于放所有的bean的监听器,并放入BeanFactory属性applicationEventMulticaster中.initApplicationEventMulticaster();// 留给子类去初始化其他bean,目前方法为空.onRefresh();// 查找bean的所有的监听器,并注册到广播器中去.registerListeners();// 初始化剩下的单实例.finishBeanFactoryInitialization(beanFactory);// 完成刷新过程,通知生命周期.finishRefresh();}
接下来,即开始对上面的步奏进行一一的讲解:
prepareRefresh();// 准备刷新上下文环境
protected void prepareRefresh() {//留给子类覆盖的方法 initPropertySources();// Validate that all properties marked as required are resolvable// 验证所需的属性已经存放到环境中 getEnvironment().validateRequiredProperties();// Allow for the collection of early ApplicationEvents,// to be published once the multicaster is available...this.earlyApplicationEvents = new LinkedHashSet<ApplicationEvent>();}
下面举一个列子,来帮助理解,如何验证所需的属性已经存放到环境中
public class MyClassPathXmlApplicationContext extends ClassPathXmlApplicationContext{public MyClassPathXmlApplicationContext(String... configLocations) throws BeansException {super(configLocations);}protected void initPropertySources(){// 在这里设置需要检测的环境变量 VARgetEnvironment().setRequiredProperties("VAR");}protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory){super.setAllowCircularReferences(false);super.setAllowBeanDefinitionOverriding(false);super.customizeBeanFactory(beanFactory);}
}
我们在使用MyClassPathXmlApplicationContext 对象加载bean的时候就会进行环境变量的验证
在使用ApplicationContext ctx = new MyClassPathXmlApplicationContext("spring.xml");的时候,如果环境变量中没有怎加VAR,就会报错,抛出异常。
转载于:https://www.cnblogs.com/histlyb/p/9179492.html
spring IOC容器的扩展相关推荐
- Spring —— IoC 容器详解
引言 本篇博客总结自官网的<The IoC Container>,其中会结合王富强老师的<Spring揭秘>融入自己的语言和理解,争取通过这一篇文章彻底扫除spring IOC ...
- 用项目案例彻底理解Spring IOC容器
本篇介绍Spring IOC容器,通过具体的实例详细地讲解IOC概念,彻底理解Spring反转控制的思想.通过本篇的学习,可以达成如下目标. ● 运用工厂模式设计程序 ● 理解JavaBean和POJ ...
- Spring – IoC 容器
Spring IoC 容器是 Spring 框架的核心.容器将创建对象,将它们连接在一起,进行配置,并管理从创建到销毁的整个生命周期.Spring 容器使用依赖项注入(DI)来管理组成应用程序的组件. ...
- 面试官:你来说一下Spring IOC容器的创建过程
这篇文章主要讲解 IOC 容器的创建过程,让你对整体有一个全局的认识,文章没有复杂嵌套的 debug 流程,相对来说比较简单. 不 BB,上文章目录. 1. 基础知识 1.1 什么是 Spring I ...
- Spring IOC容器学习总结
1. Spring Ioc容器 Spring容器是Spring框架的核心.容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁.Spring 容器使用依赖注入(DI)来管理 ...
- 什么是Spring IoC容器?
1 什么是Spring IoC容器 Spring IoC负责创建对象.管理对象(通过依赖注入(DI).装配对象.配置对象,并且管理这些对象的整个生命周期. 2 IoC的优点是什么 IoC或依赖注入把应 ...
- spring ioc容器创建过程-整体流程
文章目录 一.spring ioc 创建总览 二.BeanFactory和ApplicationContext 三.初始化DefaultListableBeanFactory 四.总结: 前面写了四篇 ...
- Spring IOC 容器源码分析
Spring IOC 容器源码分析 创建时间: 2017-11-15 00:00:00 [TOC] Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring ...
- Spring IOC容器生命周期阶段总结
Spring IOC容器生命周期 BeanFactory和ApplicationContext有何区别? 源码展示 1. Spring应用上下文启动准备阶段 2. BeanFactory创建阶段 3. ...
最新文章
- python中args1是什么意思_理解Python中的*,*args
- 怎么用php操作mysql删除数据库代码_如何使用php操作mysql的增删改查?
- 用EXCEL实现时间戳格式和日期格互转
- mysql1130_解决远程连接mysql错误1130的方法
- 论文阅读:超高分辨率图像中快速、准确的条码检测
- 基于C#net4.5websocket客户端与服务端
- ASP.NET输入文本框自动提示功能
- 2010年imac从移动硬盘启动Win10
- C++ 函数需要有返回值,但非全分支return(RVO)
- Android周日历可滑动可选择日期
- 爬虫实战---爬取猫眼电影
- 计算机使用hdmi需要设置方法,如何在计算机显示器上切换HDMI
- 冬天 计算机无法启动不了怎么办,每次到冬天电脑就开不了
- UE4 无需切线空间应用凹凸贴图
- CF Canada Cup 2016 D 优先队列
- html5制作线路图,HTML5画一个简单呢好看的电路图
- RVDS4.0 破解
- 2021年的Gartner云基础设施和平台服务魔力象限有什么不一样?
- 知行EDI系统如何通过中间数据库表方式集成金蝶ERP
- vue移动端富文本编辑器vue-html5-editor