SpringBoot框架(6)--事件监听
一、场景:类与类之间的消息通信,例如创建一个对象前后做拦截,日志等等相应的事件处理。
二、事件监听步骤
(1)自定义事件继承ApplicationEvent抽象类
(2)自定义事件监听器,一般实现ApplicationListener接口,传入自定义事件类
(3)配置监听器,启动时,需要把监听器加入到spring容器中(见实现方式)
(4)事件发布
三、实现方式
1、手动方式 --> 调用SpringBoot的addListeners方法把事件监听类添加的SpringBoot容器中
2、注解方式--> 事件监听类添加@Component
3、配置方式--> 在properties文件中配置,context.listener.classes=监听类全路径
4、事件处理类方式-->其实也是一种注解的方式,只是定义了专门的事件处理类+注解@EventListener(MyApplicationEvent.class) --> 该方法还可以指定监听的事件(推荐)
注:自定义事件无论采取哪种实现方式都需要通过SpringBoot容器的publishEvent方法类发布事件。
四、代码
1、建立Spring Initializr项目:boot-event
代码结构

首先实验第一种方式:手动方式
第一步 自定义事件类 MyApplicationEvent extends ApplicationEvent
package com.boot.event.bootevent;
import org.springframework.context.ApplicationEvent;
public class MyApplicationEvent extends ApplicationEvent {
public MyApplicationEvent(Object source) {
super(source);
}
}
MyApplicationEvent.java
第二步 自定义事件监听类
package com.boot.event.bootevent;
import org.springframework.context.ApplicationListener;
public class MyApplicationEventListener implements ApplicationListener<MyApplicationEvent> {
@Override
public void onApplicationEvent(MyApplicationEvent event) {
System.out.println("接收到了事件:" + event.getClass());
}
}
MyApplicationEventListener.java
第三、四步 添加事件监听到spring容器 并发布自定义事件
package com.boot.event.bootevent; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication
public class BootEventApplication { public static void main(String[] args) {
SpringApplication app = new SpringApplication(BootEventApplication.class); //第一种方式:手动添加监听事
app.addListeners(new MyApplicationEventListener());
ConfigurableApplicationContext contex = app.run(args); //发布事件
contex.publishEvent(new MyApplicationEvent(new Object()));
contex.close();
}
}
BootEventApplication.java
打印结果:
接收到了事件:class com.boot.event.bootevent.MyApplicationEvent
以上手动调用addListeners把事件监听添加到Sring容器中管理。
第二种方式:注解方式 --> 事件监听类添加@Component
在第一种方式的基础上,在MyApplicationEventListener类添加注解@Component,如下
@Component
public class MyApplicationEventListener implements ApplicationListener<MyApplicationEvent> {
@Override
public void onApplicationEvent(MyApplicationEvent event) {
System.out.println("接收到了事件:" + event.getClass());
}
}
把BootEventApplication.java中main方法的addListeners注释掉
//第一种方式:手动添加监听事
//app.addListeners(new MyApplicationEventListener());
运行项目,打印结果
接收到了事件:class com.boot.event.bootevent.MyApplicationEvent
可以看到自定义的事件同样被监听到。
第三种方式:配置方式
在第二种方法的基础上继续第三种方法,首先在application.properties配置文件中添加以下配置信息
context.listener.classes=com.boot.event.bootevent.MyApplicationEventListener
同时把MyApplicationEventListener类的注解@Component注释掉,如下所示
//第二种方式:添加注解
//@Component
public class MyApplicationEventListener implements ApplicationListener<MyApplicationEvent> {
//......
}
打印结果
接收到了事件:class com.boot.event.bootevent.MyApplicationEvent
说明配置的方法也成功让自定义的事件监听起作用
第四中方式:事件处理类方式 -->定义专门的事件处理类HandleEnvent.java(推荐)
package com.boot.event.bootevent; import org.springframework.context.event.ContextClosedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component; @Component
public class HandleEnvent {
@EventListener(MyApplicationEvent.class)
public void handleEvent(MyApplicationEvent event) {
System.out.println("接收到了事件:" + event.getClass());
System.out.println("接收到了事件:" + event.getSource());
} @EventListener(ContextClosedEvent.class)
public void handleEvent(Object event) {
System.out.println("接收到了事件:" + event.getClass());
}
}
HandleEnvent.java
把第三中方法中的配置信息注释掉,其他不变
#context.listener.classes=com.boot.event.bootevent.MyApplicationEventListener
打印结果
接收到了事件:class com.boot.event.bootevent.MyApplicationEvent
接收到了事件:java.lang.Object@1c4ee95c
接收到了事件:class org.springframework.context.event.ContextClosedEvent
SpringBoot框架(6)--事件监听的更多相关文章
- SpringBoot入门之事件监听
spring boot在启动过程中增加事件监听机制,为用户功能拓展提供极大的便利,sptingboot支持的事件类型有以下五种: ApplicationStartingEvent Applicatio ...
- SpringBoot事件监听机制及观察者模式/发布订阅模式
目录 本篇要点 什么是观察者模式? 发布订阅模式是什么? Spring事件监听机制概述 SpringBoot事件监听 定义注册事件 注解方式 @EventListener定义监听器 实现Applica ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- SpringBoot事件监听机制源码分析(上) SpringBoot源码(九)
SpringBoot中文注释项目Github地址: https://github.com/yuanmabiji/spring-boot-2.1.0.RELEASE 本篇接 SpringApplicat ...
- springboot 中事件监听模型的一种实现
目录 定义事件本身 定义事件源 定义监听者 一.需要实现 ApplicationListener 二.使用 @EventListener 注解 测试 项目结构 前言: 事件监听模型是一种常用的设计模式 ...
- SpringBoot Application事件监听
SpringBoot Application共支持6种事件监听,按顺序分别是: ApplicationStartingEvent:在Spring最开始启动的时候触发 ApplicationEnviro ...
- springBoot高级:自动配置分析,事件监听,启动流程分析,监控,部署
知识点梳理 课堂讲义 02-SpringBoot自动配置-@Conditional使用 Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载 ...
- SpringBoot的事件监听
事件监听的流程分为三步:1.自定义事件,一般是继承ApplicationEvent抽象类.2.定义事件监听器,一般是实现ApplicationListener接口.3.a.启动的时候,需要将监听器加入 ...
- Javascript事件模型系列(三)jQuery中的事件监听方式及异同点
作为全球最知名的js框架之一,jQuery的火热程度堪称无与伦比,简单易学的API再加丰富的插件,几乎是每个前端程序员的必修课.从读<锋利的jQuery>开始,到现在使用jQuery有一年 ...
随机推荐
- Linux监控命令之==>ps
一.命令说明 ps 命令是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵死.哪些进程占用了过多的资源等等.总之大部分信息都是可以通过 ...
- 微信小程序组件篇实战
实现效果如下: 实现代码如下: index.wxml: <!--index.wxml--> <view class="container"> <vie ...
- Linux下获取安装包
https://blog.csdn.net/xiaofeng3011/article/details/82797614 # cat /etc/yum.conf [main]cachedir=/var/ ...
- JForum论坛安装以及部署(转)
链接地址:https://www.cnblogs.com/Amos-Turing/p/7151009.html 下载JForum2.1.9 包手动放到tomcat的webapps下面, 这次打开网址: ...
- MariaDB 连接查询,视图,事物,索引,外键
1.连接查询 --创建学生表 create table students ( id int unsigned not null auto_increment primary key, name var ...
- Day03:数组 、 继承的意义(上)
继承 面向对象编程三(四)大特征 (抽象),封装,继承,多态什么是继承? 继承是面向对象编程中一种代码复用的方式为什么需要继承? 减少代码冗余,提高程序的可维护性和可扩展性怎样使用继承? 语法: cl ...
- python 三元运算、列表推倒式、字典推倒式、生成器生成式
1.三元运算 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(res) 2.列表推倒式 #1.示例 egg_ ...
- FPGA —— LED控制
第一次接触新东西的时候,难免会磕磕碰碰,不过遇到问题不要着急,慢慢来.原因总归是我们自己引起的,一步步找到问题的根源,然后彻底解决它,避免下次再犯. 在开始之前先分享一下工具:(Quartus II ...
- [CF750G] New Year and Binary Tree Paths
目录 简单的 组合的 题目链接 简单的 设从节点\(x\)开始不断往左儿子走h-1步,则编号和为\(x\sum_{i=0}^{h-1}2^i=x(2^h-1)\). 若倒数第\(i\)步走向的是右儿子 ...
- transform(转https://blog.csdn.net/qq_24189933/article/details/79293870)
transform 前面我们一起学习了CSS3中的渐变.圆角.阴影等几个属性的使用,今天开始我们一起来学习有关于CSS3制作动画的几个属性:变形(transform).转换(transition)和动 ...