getOrCreateEnvironment()方法源码探究
该方法目的是创建一个环境对象,并且根据环境类型,自动判断是创建web环境对象,还是标准非web环境对象.
首先该方法源于prepareEnvironment准备环境:
然后进入该方法源码:
可以发现:根据webEnvironment字段,可以判断要生成的环境的类型,此处添加了web环境的jar包,所以是标准的Servlet环境.
这里直接new StandardServletEnvironment()创建对象,查看StandardServletEnvironment构造器,发现是空实现,好像什么也没做
,其实并非什么都没做,因为创建一个对象,首先去调用父类构造器,如果父类还有父类,则继续向上调用父类构造器,直到顶层父类.
所以下面应该看其父类实现:
可知:标准的Servlet环境继承了标准环境,标准环境又继承了抽象环境,而前两者构造器均为空实现,顶层父类--抽象环境才有实现.
其调用了customizepropertySources()方法,但是由于该方法是抽象方法,所以实际被调用的是真实调用者的实现,即:标准Servlet环境中的该方法,其方法实现为:
可知:该方法有3个主要逻辑:添加servletConfigINitParams属性源,添加servletContextInitParams属性源,调用标准环境的customizePropertySources方法.
前两个逻辑简单,后一个调用了标准环境的customizePropertySources方法,源码如下:
可知:这里有2个逻辑:
获取系统属性集,并封装成一个MapPropertySource属性源,添加
获取系统环境,并封装成一个SystemEnvironmentPropertySorce属性源,添加.
综上可知:创建标准Servlet对象的过程,就是添加4个属性源的过程,这些属性源添加到哪里了呢?是环境对象的propertySources字段.
所以在创建标准Servlet对象过程中,也是对propertySources初始化的过程.
getOrCreateEnvironment()方法源码探究的更多相关文章
- prepareRefresh()方法源码探究
该方法目的是做刷新上下文前的准备工作: 首先清空bean扫描器map中的内容,然后调用父类的prepareRefresh方法: 父类的准备刷新方法,主要做了3个工作: 1.简单的标志赋值----> ...
- refreshContext(context)方法源码探究
该方法目的是刷新应用上下文,是容器启动最主要的方法,其实现是一个模板方法,内容巨大,所以先看模板方法都做了哪些事,然后再细看每个方法的实现机制. refreshContext(context)方法首先 ...
- SpringBoot读取配置文件源码探究
1. SpringBoot读取配置文件源码探究 1.1. 概览 springboot的源码是再原来的Spring源码上又包了一层,看过spring源码都知道,当我们从入口debug进去的时候,原来的S ...
- spring-cloud-sleuth+zipkin源码探究
1. spring-cloud-sleuth+zipkin源码探究 1.1. 前言 粗略看了下spring cloud sleuth core源码,发现内容真的有点多,它支持了很多类型的链路追踪, ...
- spring-boot-2.0.3之quartz集成,数据源问题,源码探究
前言 开心一刻 着火了,他报警说:119吗,我家发生火灾了. 119问:在哪里? 他说:在我家. 119问:具体点. 他说:在我家的厨房里. 119问:我说你现在的位置. 他说:我趴在桌子底下. 11 ...
- Vue源码探究-全局API
Vue源码探究-全局API 本篇代码位于vue/src/core/global-api/ Vue暴露了一些全局API来强化功能开发,API的使用示例官网上都有说明,无需多言.这里主要来看一下全局API ...
- Vue源码探究-事件系统
Vue源码探究-事件系统 本篇代码位于vue/src/core/instance/events.js 紧跟着生命周期之后的就是继续初始化事件相关的属性和方法.整个事件系统的代码相对其他模块来说非常简短 ...
- Vue源码探究-状态初始化
Vue源码探究-状态初始化 Vue源码探究-源码文件组织 Vue源码探究-虚拟DOM的渲染 本篇代码位于vue/src/core/instance/state.js 继续随着核心类的初始化展开探索其他 ...
- Vue源码探究-源码文件组织
Vue源码探究-源码文件组织 源码探究基于最新开发分支,当前发布版本为v2.5.17-beta.0 Vue 2.0版本的大整改不仅在于使用功能上的优化和调整,整个代码库也发生了天翻地覆的重组.可见随着 ...
随机推荐
- Windows 7 改造
1.界面改造 1.1 软件 Wallpaper Engine 收费(18¥) 动态桌面,通过steam安装,使用steam中的创意工坊下载内容 最好使用集成显卡运行,单显卡方案容易桌面异常刷新 Clo ...
- 家庭版Windows10没有远程桌面的问题
https://github.com/stascorp/rdpwrap/releases
- 剑指Offer (汇总)
刷完剑指Offer很久了,前几天想起来去年开通的博客园,正好把刷题笔记整理一下 刷题平台:牛客网 刷题语言:Python **链表(8道)** [剑指Offer 3. 从尾到头打印链表 (链表)](h ...
- tomcat下服务启动失败原因
Tomcat启动成功,输入网址后可以显示小黄猫界面,但是在Tomcat下的服务却启动不成功,显示404(以Jenkins为例,运用多种方式查看原因) 注:1.单启动Tomcat服务是可以启动成功的. ...
- who are we?
human been like animals,we work for our master. when we dreaming,we drive the machine run.
- Linux下Apache的安装【可用】
失败的情况有很多种,但成功的路有时候只有一条.在经历了多次失败安装后,特在此将apache安装的精简步骤罗列出来供日后参考. ====================APACHE 安装方法====== ...
- 在IE浏览器中url传参长度问题
1.在这之前我一直以为,应该说是并没有去思考过,url地址传参的长度限制问题:知道在项目材料价格系统中遇到之后,才对这个问题进行了具体的探索.IE中最大的长度限制为2084个,用于get传递数据的长度 ...
- Java 8 Lambda 表达式(一)
Java 8 新特性 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lambda 表 ...
- Netty 基本组件与线程模型
Netty 的学习内容主要是围绕 TCP 和 Java NIO 这两个点展开的,由于 Netty 是基于 Java NIO 的 API 之上构建的网络通讯框架,Java NIO 中的几个组件,都能在 ...
- 【oracle】dmp导数据库
假定数据库A为源数据库,数据库B为目标数据库 step1在数据库A中,导出生成.dmp文件,操作流程如下(以下操作均在系统用户ora11g下执行) 1.该操作只需要在第一次使用时执行,A_dump_d ...