zoukankan      html  css  js  c++  java
  • 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初始化的过程.

  • 相关阅读:
    【转载】Python未来互联网主流语言! . 天高地厚
    Android系统Intent的使用(转)
    android:获取联系人信息(姓名和电话)
    CMNET和CMWAP区别(转)
    Android界面开发推荐颜色
    android : framelayout 研究
    android : drag and drop ui
    android 四种模式研究之一
    ListView与CheckBox,EditText,Button结合
    android 之 custom view(一)
  • 原文地址:https://www.cnblogs.com/wangxuejian/p/10639696.html
Copyright © 2011-2022 走看看