概要
本次了解了下SpringBoot的事件机制,了解得比较浅显,在此记录下。
有错误的地方还请大家指正。
各个类的作用
- EventPublishingRunListener
- 该类是springboot启动流程中系统事件的监听器,处理在SpringBoot启动的过程中的系统事件;
- 该类会初始化SimpleApplicationEventMulticaster,向SimpleApplicationEventMulticaster中注入系统的监听器,并调用SimpleApplicationEventMulticaster的multicastEvent方法进行事件广播;
- 系统事件包括:ApplicationStartingEvent、ApplicationEnvironmentPreparedEvent、ApplicationPreparedEvent和ApplicationReadyEvent;
- SimpleApplicationEventMulticaster
- 负责监听器的注册和事件广播;
- 系统会把监听器注册到该类中,每次有相应的事件发生时,系统会调用该类的multicastEvent方法事件广播,然后相应的处理器会消费该事件;
- EventPublishingRunListener和context容器中的事件广播都是由该类完成,但并非同一个实例(容器中会先从bean工厂中获取,没有的化则自己new;EventPublishingRunListener则是自己new的);
- ApplicationListener
- Spring中的监听器的超类;
- ApplicationEventPublisher
- context容器中的事件发布接口;
- 最终的实现方式都是通过调用SimpleApplicationEventMulticaster的multicastEvent方法进行事件的广播,然后由相应的监听器进行处理的;
- ApplicationStartedEvent
- 该类是springboot系统事件中的启动事件。由EventPublishingRunListener的starting方法调用SimpleApplicationEventMulticaster的multicastEvent方法进行事件广播;
所有SpringBoot系统事件的发布顺序
- ApplicationStartingEvent;
- 开始初始化SpringBoot;
- ApplicationEnvironmentPreparedEvent;
- environment准备完成;
- ApplicationPreparedEvent;
- SpringBoot应用准备完成;
- ContextRefreshedEvent;
- context refresh完成;
- ServletWebServerInitializedEvent;
- servletWeb环境初始化完成;
- ApplicationStartedEvent;
- 应用启动完成;
- ApplicationReadyEvent;
- 应用准备完成;