这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战
功能
prepareRefresh()
该方法为 refresh()
中的一个方法。
功能为以下几点
- 设置容器启动时间
- 设置 closed 和 active 两个标识位
- 初始化系统属性资源
- 获取 Environment 对象,校验属性值并赋值到 Environment 对象中
- 准备监听器和事件监听器
代码
1 | java复制代码package org.springframework.context.support |
扩展 initPropertySources()
Spring的强大之处不仅仅在于它为Java开发者提供了极大便利,而且在于它的开放式架构,使得用户可以拥有最大扩展 Spring 的能力。其中,initPropertySources() 方法就是一个例子。
可以看到 prepareRefresh() 中的 initPropertySources() 方法并没有任何参数,而如果进入initPropertySources() 方法内部,也会发现该方法是空的,没有任何逻辑。
Spring之所这样设计,就是为了让用户根据自己的需要,可以重写 initPropertySources() 方法,并在方法中进行个性化的属性处理以及设置。
举例
我们可以继承此类或其子类来重写initPropertySources方法,实现一些扩展。此处我们做了两个扩展:
- 向Environment中添加了一个属性值。
- 我们设置了一个必要的系统属性username,当Environment中不包含username属性时系统会抛出异常。
1 | java复制代码public class MyClassPathXmlApplicationContext extends ClassPathXmlApplicationContext { |
本文转载自: 掘金