Spring Boot 事件监听

请关注我的微信公众号


Spring Boot 事件监听_第1张图片
个人微信公众号

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


Spring Boot 事件监听_第2张图片

事件流程

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

Spring Boot事件监听的例子

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

Spring Boot 事件监听_第3张图片

第二步,自定义事件监听器,实现 ApplicationListener接口:
Spring Boot 事件监听_第4张图片

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

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

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


Spring Boot 事件监听_第5张图片

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

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

Spring Boot 事件监听_第6张图片

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

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

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

Spring Boot 事件监听_第7张图片

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

Spring Boot 事件监听_第8张图片

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

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

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

Spring Boot 事件监听_第9张图片

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

Spring Boot 事件监听_第10张图片

PROPERTY_NAME的值为 "context.listener.classes"
Spring Boot 事件监听_第11张图片

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

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

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

Spring Boot 事件监听_第12张图片

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

Spring Boot 事件监听_第13张图片

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

Spring Boot 事件监听_第14张图片

Spring boot中自带的事件

Spring Boot 事件监听_第15张图片

spring中自带的事件

Spring Boot 事件监听_第16张图片

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

Spring Boot 事件监听_第17张图片

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

Spring Boot 事件监听_第18张图片

你可能感兴趣的:(Spring Boot 事件监听)