ApplicationListener监听器用来监听ApplicationEvent事件。

ApplicationListener 可以在Spring项目运行过程中,监听对应的事件,来完成相应的操作。

 

ApplicationListener接口



是Spring应用生命周期各个阶段的事件监听器,可以在任意一个阶段触发我们想要执行的操作
负责在每个阶段做做对应处理
比如
ApplicationEnvironmentPreparedEvent环境准备完成事件中加载配置文件属性到数据源中


在SpringBoot启动过程中,要自定义监听SpringBoot启动过程中的事件。

SpringBoot启动流程中用到了事件都是继承自 SpringApplicationEvent 类




1、ApplicationStartingEvent:  在Spring最开始启动的时候触发
日志系统初始化,字符集初始化,消息转换器,类型转换器初始化。
2、ApplicationEnvironmentPreparedEvent:环境准备完成事件,在Spring已经准备好上下文但是上下文尚未创建的时候触发
命令行参数,配置文件属性源加载到Environment

3、ApplicationPreparedEvent:上下文准备完成事件,刷新上下文之前触发

4、ApplicationStartedEvent:应用启动完成事件,在刷新上下文之后、调用application命令之前触发
在这里bean定义加载,并实例化完成,已经注册到BeanFactory

5、ApplicationReadyEvent:在调用applicaiton命令之后触发

6、ApplicationFailedEvent:在启动Spring发生异常时触发


添加启动流程的事件监听器的常用方法有两种

1、在META-INF/spring.factories文件中设置监听器:



# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.ClearCachesApplicationListener,\
org.springframework.boot.builder.ParentContextCloserApplicationListener,\


2、在启动类中,先调用SpringApplication构造方法,再将自定义监听器设置进去。

 

在SpringBoot启动过程中,上下文事件监听器的处理过程

prepareContext()方法中



listeners.contextLoaded(context);


执行这个代码时,会将SpringApplication中的 监听器列表复制到ApplicationContext的监听器列表中。

 

到 refreshContext()方法时,



initApplicationEventMulticaster();
registerListeners();


会初始化ApplicationContext的事件广播类,SimpleApplicationEventMulticaster

将ApplicationContext的 事件监听器列表, BeanFactory中的 ApplicationListener实现类的Bean定义名称都注册到事件广播器中。

 

启动过程的事件之外的事件(自定义)

自定义事件以及事件监听器的方法

除了上面两种方法外,

3、实现监听器类,定义为Bean类,可以被自动添加到列表中

 

SpringApplicationRunListener接口

SpringBoot中的事件广播是通过监听器SpringApplicationRunListener接口实现类EventPublishingRunListener来进行事件分发从而调用ApplicationListener监听器的

所以我们可以配置自定义的springboot的监听器

配置在META-INF/spring.factories文件中配置



# Run Listeners
org.springframework.boot.SpringApplicationRunListener=\
org.springframework.boot.context.event.EventPublishingRunListener