在这一章节中, 我们主要来学习prepareRefresh()方法。这个函数主要就是环境准备,例如对系统属性及环境变量的初始化及验证。下面我们先来看一张时序图。(相关资源可到这里下载:http://pan.baidu.com/s/1sjSo9a9)

1. AbstractApplicationContext

在个类中,我们可以看我们需要的环境准备函数prepareRefresh()。这里有两个函数值得我们去留意,那就是留给子类覆盖和验证需要的属性文件是否都已经放入环境中。

protected void prepareRefresh() {this.startupDate = System.currentTimeMillis();this.closed.set(false);this.active.set(true);if (logger.isInfoEnabled()) {logger.info("Refreshing " + this);}// Initialize any placeholder property sources in the context environment//留给子类覆盖<strong>initPropertySources()</strong>;// Validate that all properties marked as required are resolvable// see ConfigurablePropertyResolver#setRequiredProperties//验证需要的属性文件是否已经放入环境中<strong>getEnvironment().validateRequiredProperties()</strong>;// Allow for the collection of early ApplicationEvents,// to be published once the multicaster is available...this.earlyApplicationEvents = new LinkedHashSet<ApplicationEvent>();}

对于上面给出的initPropertySource是提供给用户去扩展Spring的能力。用户可以根据自身的需求去重写initPropertySource方法。而validateRequiredProperties则是对属性进行验证。

2. 总结

Spring在加载前做的环境准备,主要是用prepareRefresh函数来实现。这里的实现突出了Spring的设计特点,允许用户去扩展自己想要的功能,这也是Spring框架的灵活性之一。更多的细节性代码,读者可以自己跟踪进出看看。

Spring源码之ApplicationContext(二)准备工作相关推荐

  1. 第五篇:Spring源码篇-ApplicationContext

    Spring源码篇-ApplicationContext   前面通过手写IoC,DI.AOP和Bean的配置.到最后ApplicationContext的门面处理,对于Spring相关的核心概念应该 ...

  2. Spring源码之ResourceLoader(二):PathMatchingResourcePatternResolver实现getResources加载多文件

    Spring源码之ResourceLoader二:PathMatchingResourcePatternResolver实现getResources加载多文件 findAllClassPathReso ...

  3. Spring源码系列(十二)Spring创建Bean的过程(二)

    1.写在前面 上篇博客主要Spring在创建Bean的时候,第一次调用的Bean的后置处理器的过程,同时笔者也打算将整个Spring创建的Bean的过程,通过这个系列,将Bean的创建过程给讲清楚,废 ...

  4. Spring源码之ApplicationContext

    ​ 本文是针对Srping的ClassPathXMLApplicationContext来进行源码解析,在本篇博客中将不会讲述spring Xml解析注册代码,因为ApplicationContext ...

  5. idea 编译spring_《Spring源码解析(二)》构建 Spring5 源码工程,开启研读Spring源码之路...

    Spring5 源码下载注意事项 首先你的 JDK 需要升级到 1.8 以上.Spring3.0 开始,Spring 源码采用 github 托管,不再提供官网下载 链接.这里不做过多赘述,大家可自行 ...

  6. Spring源码分析(二):底层架构核心概念解析

    本节主要介绍一下Spring底层中用到的"基础设施",是后续看Spring源码所必备的,防止后续看源码的过程中,遇到不会的概念得单独跳出来学习. BeanDefinition Be ...

  7. Spring源码解析-applicationContext.xml加载和bean的注册

    applicationContext文件加载和bean注册流程 ​ Spring对于从事Java开发的boy来说,再熟悉不过了,对于我们这个牛逼的框架的介绍就不在这里复述了,Spring这个大杂烩,怎 ...

  8. Spring源码解析(二)BeanDefinition的Resource定位

    IOC容器的初始化过程主要包括BeanDefinition的Resource定位.载入和注册.在实际项目中我们基本上操作的都是ApplicationContex的实现,我们比较熟悉的ClassPath ...

  9. Spring源码分析(二)BeanFactoryPostProcessor之ConfigurationClassPostProcessor的调用过程

    前言:BeanFactoryPostProcessor是Spring中的重要组成接口,容器创建过程中起到解析注解,注册BeanDifinition,改变BeanDefiniton属性(也就是改变bea ...

  10. spring源码解析(二) @Autowired自动注入过程

    1.依赖注入到底有几种?两种.四种.五种? 两种: 手动:set(byType.byName).构造器 自动:xml中:set.构造器 autowired注解中:set.属性.构造器 重点不在于到底有 ...

最新文章

  1. c语言fac函数求n的阶乘,急求C语言编辑题:Cnm=n!/m!(n-m)!其中n,m 由键盘输入。要求设计一个函数fac(n)求某个正整数n 的阶乘。...
  2. c语言的十进制转十六进制字符串,用c语言写一个函数把十进制转换成十六进制,该如何处理...
  3. oracle rac 错误日志路径,ORACLE 11G RAC--日志路径
  4. 关于方法论的对话之二敏捷与方法论
  5. iOS API离线文档下载和查阅
  6. 计蒜客 91 地铁 HDU 5263 平衡大师(二分+网络流)
  7. raw_input() 与 input() __ Python
  8. 悖论对计算机科学影响,数学和计算机科学的核心逻辑悖论
  9. IOS开发之异步加载网络图片并缓存本地实现瀑布流(一)
  10. git revert与git reset
  11. 北京理工大学计算机基础实验,北京理工大学2020计算机基础考研真题
  12. DXperience 7.1.1
  13. 微型计算机原理及应用 湖南大学,2015年微机原理及其应用-湖南大学.doc
  14. ucinet计算聚类系数大于1怎么办_ucinet软件解释对照
  15. 一句话说明sync, fsync, fdatasync的区别
  16. 开发微信小程序中遇见的难点,以及解决方法
  17. java开源论坛系统Mango BBS源代码下载
  18. ds12c887程序C语言,时钟芯片DS12C887使用说明详解.doc
  19. 使用微信小程序editor富文本编辑器(爬坑要点)
  20. linux中负载值为多少正常_linux查看系统负载常用指标与命令

热门文章

  1. Latex中参考文献排序
  2. DropdownList获取ID方法
  3. MP3文件格式说明 (转)
  4. 网络工程师HCIE-RS-layer2(原理+实验)
  5. Java 调用gc语句_Java GC 、引用
  6. 二叉树的镜像(C++)
  7. 使用paramiko在eNSP的交换机中批量创建VLAN
  8. 第 10 章 容器监控 - 080 - Weave Scope 容器地图
  9. CentOS6.5安装教程
  10. 从Spring中的@Transactional注解说起