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

4.2 ConditionEvaluationReportLoggingListener分析

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

public class ConditionEvaluationReportLoggingListener
      implements ApplicationContextInitializer<ConfigurableApplicationContext> {}

从该对象的基础定义可以发现它并未有其他的接口实现,因此直接对它的成员变量进行说明,有关ConditionEvaluationReportLoggingListener成员变量的内容详见表4-2。

表4-2 ConditionEvaluationReportLoggingListener成员变量

在上述三个变量中引出了报告对象,关于ConditionEvaluationReport成员变量,详见表4-3。

表4-3 ConditionEvaluationReport成员变量

当前阶段,对于ConditionEvaluationReport的了解,我们仅仅需要知道成员变量即可,关于Spring Boot中条件相关内容会在后续章节中单独分析。回到ConditionEvaluationReportLoggi-ngListener中查看ApplicationContextInitializer的initialize方法,详细代码如下:

    public void initialize(ConfigurableApplicationContext applicationContext) {
        // 设置成员变量应用上下文
        this.applicationContext = applicationContext;
        // 添加应用监听器
         applicationContext.addApplicationListener(new ConditionEvaluationReportList
ener());
        // 应用上下文类型是GenericApplicationContext
        if (applicationContext instanceof GenericApplicationContext) {
           // 获取报告对象设置到成员变量中
           this.report =
    ConditionEvaluationReport.get(this.applicationContext.getBeanFactory());
        }
    }

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

(1)将参数应用上下文设置给成员变量应用上下文;

(2)添加应用监听器,具体类型是ConditionEvaluationReportListener;

(3)如果应用上下文类型是GenericApplicationContext,从上下文中获取Bean工厂,再从Bean工厂中获取ConditionEvaluationReport。

在前文提到了ConditionEvaluationReportListener的创建,该对象的基础定义代码如下:

private class ConditionEvaluationReportListener implements GenericApplicationListener {}

从ConditionEvaluationReportListener的基础定义可以发现它是一个应用监听器,主要关注的方法是onApplicationEvent,详细代码如下:

public void onApplicationEvent(ApplicationEvent event) {
   ConditionEvaluationReportLoggingListener.this.onApplicationEvent(event);
}

这段代码会继续调用ConditionEvaluationReportLoggingListener提供的onApplicationEvent方法,详细调用代码如下:

在onApplicationEvent方法中会根据不同的事件类型做出不同处理,此处的核心调度是logAutoConfigurationReport方法。至此,对于ConditionEvaluationReportLoggingListener的分析就告一段落,接下来将进入ServerPortInfoApplicationContextInitializer的分析中。 hi1cHuzY8YwCNDAM8Jslxx/Bis/3oMJj8YdXOVgUfytUqBhBcFWlixv6Y4NqC2Vg

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