购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.11 ContextIdApplicationContextInitializer分析

本节将对ContextIdApplicationContextInitializer进行分析,关于该对象的基础定义代码如下:

public class ContextIdApplicationContextInitializer
      implements ApplicationContextInitializer<ConfigurableApplicationContext>,
Ordered {}

从对象的基础定义中可以发现并未实现其他接口,下面对ApplicationContextInitializer的实现方法进行说明,详细代码如下:

public void initialize(ConfigurableApplicationContext applicationContext) {
   // 获取上下文ID
   ContextId contextId = getContextId(applicationContext);
   // 设置应用上下文ID
   applicationContext.setId(contextId.getId());
   // 注册上下文ID
   applicationContext.getBeanFactory().registerSingleton(ContextId.class.
getName(), contextId);
}

在initialize方法中主要的处理流程如下:

(1)获取上下文ID;

(2)为应用上下文设置上下文ID;

(3)向Bean工厂中注册上下文ID。

下面将对ConfigDataApplicationContextInitializer进行分析,关于该对象的基础定义代码如下:

public class ConfigDataApplicationContextInitializer
      implements ApplicationContextInitializer<ConfigurableApplicationContext> {}

从对象的基础定义中可以发现并未实现其他接口,下面对ApplicationContextInitializer的实现方法进行说明,详细代码如下:

public void initialize(ConfigurableApplicationContext applicationContext) {
   // 获取环境对象
   ConfigurableEnvironment environment = applicationContext.getEnvironment();
   // 添加环境对象
   RandomValuePropertySource.addToEnvironment(environment);
   // 创建默认的引导上下文
   DefaultBootstrapContext bootstrapContext = new DefaultBootstrapContext();
   // 应用配置
   ConfigDataEnvironmentPostProcessor.applyTo(environment, applicationContext,
bootstrapContext);
   // 关闭引导上下文
   bootstrapContext.close(applicationContext);
   // 移动到最后
   DefaultPropertiesPropertySource.moveToEnd(environment);
}

在initialize方法中主要的处理流程如下:

(1)获取环境对象;

(2)添加环境对象;

(3)创建默认的引导上下文;

(4)应用环境配置;

(5)关闭引导上下文,触发BootstrapContextClosedEvent事件;

(6)将环境对象移动到最后索引位。

在上述处理流程中最关键的方法是ConfigDataEnvironmentPostProcessor.applyTo,详细代码如下:

在上述代码中主要目标是创建ConfigDataEnvironmentPostProcessor来完成后置的环境对象处理,具体处理代码如下:

在postProcessEnvironment方法中主要目标是创建ConfigDataEnvironment并且调用processAnd-Apply方法,processAndApply的详细代码如下:

在上述代码中会创建ConfigDataImporter、ConfigDataEnvironmentContributors和ConfigData-ActivationContext,这三个对象属于环境配置信息存储对象,最终它们三个对象都会进行profile的应用,当应用完成后会进行环境对象的应用,具体处理方法是applyToEnvironment,详细代码如下:

在applyToEnvironment方法中主要的处理流程如下。

(1)检查contributors对象中的无效数据,检查过程中会抛出异常。

(2)从环境对象中获取属性源对象。

(3)处理contributors中的各个元素,处理细节是将合法元素加入第(2)步获取的属性源对象中,并且触发onPropertySourceAdded方法,onPropertySourceAdded方法是环境配置(属性)变化后的一个事件。

(4)移动属性源对象到最后一个元素位置。

(5)获取profiles,将其设置到环境变量中。 31hwrxLxPK9s9DmkoJpQF9TZGCD4+yZ5eX2AoGlgKsEYJrqIKEt1oP42l2hBt0Uz

点击中间区域
呼出菜单
上一章
目录
下一章
×