1Spring事件驱动模型
1.1环境
JDK1.8
SpringBoot 2.2.1.RELEASE
1.2概述
事件驱动模型分为三类角色:事件角色、事件发布者角色、事件监听者角色。
1.3事件角色
类图如下图所示:
1.3.1EventObject
完整路径:java.util.EventObject
此类为事件的基类,其结构如下图所示:
其中:
source为事件发布者的引用。
1.3.2ApplicationEvent
完整路径:org.springframework.context.ApplicationEvent
此类为Spring中所有application事件的基类。
结构图如下图所示:
其中:
timestamp为事件发生时的系统时间。
1.3.3SpringApplicationEvent
完整路径:org.springframework.boot.context.event.ApplicationReadyEvent
此类用于关联SpringApplication,即:事件的source为SpringApplication。
结构图所下图所示:
1.3.4SpringApplicationEvent子类
除ApplicationFailedEvent以外,其他event顺序即为实际发生的先后顺序。
ApplicationStartingEvent
此事件为SpringApplication已启动之后但是Environment或ApplicationContext可用之前。
ApplicationEnvironmentPreparedEvent
此事件为Enviroment准备完成后、ApplicationContext创建之前的事件。
ApplicationContextInitializedEvent
此事件为ApplicationContext初始化后、bean definitions加载前的事件。
ApplicationPreparedEvent
此事件为ApplicationContext准备完成但还没有refresh后、bean definitions装载前、Enviroment已准备完毕的事件。
ApplicationStartedEvent
此事件为ApplicationContext refresh后但是ApplicationRunner和CommandLineRunner被调用之前的事件。
ApplicationReadyEvent
此事件为应用可以提供服务的事件。
ApplicationFailedEvent
此事件为SpringApplication启动失败后的事件。
1.4事件发布者角色
ApplicationEventPublisher为事件发布者接口,ApplicationContext接口继承ApplicationEventPublisher。
1.5事件监听者角色
1.5.1EventListener
完整路径:java.util.EventListener
此类为事件监听者的基类,所有的事件监听者必须是该类的子类。
1.5.2ApplicationListener
完整路径:org.springframework.context.ApplicationListener
此类为Spring中事件监听者的基类,Spring通过该类的泛型来判断某事件是否为该监听者所需事件从而进行事件的过滤。