SpringBoot扩展接口- ApplicationListener 事件监听器
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
出处:https://www.cnblogs.com/gne-hwz/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任