标签:src jar包 http 继承 context web 目的 tom tee
该方法目的是创建一个环境对象,并且根据环境类型,自动判断是创建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()方法源码探究
标签:src jar包 http 继承 context web 目的 tom tee
原文地址:https://www.cnblogs.com/wangxuejian/p/10639696.html