本节将对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的分析中。