Spring Boot 事件监听

作者: 每天学点编程 | 来源:发表于2017-09-23 17:12 被阅读2209次

请关注我的微信公众号


个人微信公众号

技术交流群 (仅作技术交流):642646237
请关注我的头条号:


事件流程

1.自定义事件,一般是继承ApplicationEvent抽象类;
2.自定义事件监听器,一般是实现ApplicationListener接口;
3.启动的时候,需要把监听器加入到spring容器中;
4.发布事件,使用ApplicationContext.publishEvent发布事件;

Spring Boot事件监听的例子

下面的实例是按照 事件流程 中的说明进行的。
第一步,自定事件,继承了ApplicationEvent抽象类:


第二步,自定义事件监听器,实现ApplicationListener接口:

第三步,启动的时候,需要把监听器加入到spring容器中:

第四步,发布事件,使用ApplicationContext.publishEvent发布事件:

入口程序完整的代码如下:


配置监听器——org.springframework.boot.SpringApplication.addListeners(ApplicationListener<?>...)添加监听器

配置监听器——把监听器纳入到spring容器中管理


需要注意的是MyApplicationListener是在com.maijunjin.springboot.springboot_start_listener.listener中,所以需要修改App所在的包为com.maijunjin.springboot.springboot_start_listener

配置监听器——使用context.listener.classes配置项配置

配置监听器——使用@EventListener注解,在方法上面加入@EventListener注解,且该类需要纳入到spring容器中管理

需要注意方法的参数,请观察一下运行结果:

参数为MyApplicationEvent类型的只运行了一次,而参数类型为Object的运行了几次。

对 配置监听器——使用context.listener.classes配置项配置 方式进行解析

是通过org.springframework.boot.context.config.DelegatingApplicationListener类实现的,

在spring boot启动的过程中会触发ApplicationEnvironmentPreparedEvent事件:


PROPERTY_NAME的值为 "context.listener.classes"

更具体的细节请自行查看。

对 配置监听器——使用@EventListener注解,在方法上面加入@EventListener注解,且该类需要纳入到spring容器中管理 详解

具体细节请查看
org.springframework.context.event.EventListenerMethodProcessor类。
下面只勾画出几个重点的地方:

下面的代码获取所有被@EventListener注解的方法:

下面的代码根据该方法生成ApplicationListener对象,并加入到Spring容器中

Spring boot中自带的事件

spring中自带的事件

下面测试一下org.springframework.context.event.ContextStoppedEvent事件

context.stop();会触发ContextStoppedEvent事件:

相关文章

网友评论

    本文标题:Spring Boot 事件监听

    本文链接:https://www.haomeiwen.com/subject/ikscextx.html