\t\tthis.active.set(true);\t\t// Initialize any placeholder property sources in the context environment.
\t\t// 初始化上下文环境中的任何占位符属性源
\t\t// 留给子类进行扩展 , 比如添加必须的属性值验证
\t\tinitPropertySources();\t\t// Validate that all properties marked as required are resolvable:
\t\t// see ConfigurablePropertyResolver#setRequiredProperties
\t\t// 获取环境对象 , 并验证需要的属性
\t\tgetEnvironment().validateRequiredProperties();\t\t// Store pre-refresh ApplicationListeners...
\t\t// 准备应用监听器和实践的容器初始化
\t\tif (this.earlyApplicationListeners == null) {\t\t\tthis.earlyApplicationListeners = new LinkedHashSet<>(this.applicationListeners);
\t\t\t\telse {\t\t\t// Reset local application listeners to pre-refresh state.
\t\t\t// 如果不为空 , 那么就清空掉 , 并设置新的早期的监听器进去
\t\t\tthis.applicationListeners.clear();\t\t\tthis.applicationListeners.addAll(this.earlyApplicationListeners);
\t\t\t\t// Allow for the collection of early ApplicationEvents
\t\t// to be published once the multicaster is available...
\t\tthis.earlyApplicationEvents = new LinkedHashSet<>();
\t
这里有个问题就是他的环境信息是何时设置进去的呢?
实际上是在容器启动时调用了父类构造函数时设置进去的 , Environment
他是一个接口 , 他有个重要的实现类叫 StandardEnvironment
, 在Spring启动的时候就会使用这个类进行环境信息的加载 , 最终他会调用到 System#getProperties
和 System#getenv
方法 , 然后将加载到属性放在Map中进行保存 。
大概的流程如下:
标记的类就是 Environment
环境信息的加载过程调用的类 , 最终会调用到 System#getProperties
和 System#getenv
方法 , 然后完成环境信息的加载 , 主要加载的信息就是系统的环境变量 , 比如在 Windows
中配置的环境变量或者启动类中使用 -D
参数配置的启动参数都会进行加载到 StandardEnvironment
这个类中 , 类似于使用- Dxxx.name=123
这种参数会加载到 systemProperties
中 , 配置的 windows
环境变量会加载 systemEnvironment
中 。
【spring|Spring 源码 之Spring IOC 容器 前戏准备工作】这个就是 Spring IOC
创建的第一个方法的前戏准备工作 , 接下来解读默认的 BeanFactory
实现类 DefaultListableBeanFactory
的创建过程 。
- spring|立体双扬+大电池,OPPOA57正式开售,追剧党闭眼入!
- spring|台灯、词典笔、学习机,在线教育都去卖货了?
- |面试必须要掌握的内容:多线程与Spring容器事务机制
- spring|刘强东一生最大的困惑,消费者为何更爱淘宝拼多多?
- Python|熬夜整理了70个Python经典实用练手项目(附源码)
- TCL|【Java面试题】大厂面试必问的Spring 问题你来问,我来答!
- 蚂蚁集团向国家信息安全漏洞共享平台上报spring重大漏洞,现已
- spring|【Java面试题】大厂面试必问的Spring 问题你来问,我来答!
- spring|这次是真的了!微软发布电脑管家,国内用户专供
- spring|听音乐用什么无线耳机好,真无线耳机上手快速指南