文章目录

  • 自定义一个事件类
  • 监听类:
  • 事件发布者
  • 改用@EventListener注解:
    • 总结

自定义一个事件类

public class OnRegistrationCompleteEvent extends ApplicationEvent {private final User user;public OnRegistrationCompleteEvent(final User user) {super(user);System.out.println("登录/注册了一个"+user.toString());this.user = user;}public User getUser() {return user;}
}

监听类:

@Component
public class EventListener implements ApplicationListener<OnRegistrationCompleteEvent> {@Override@NonNullpublic void onApplicationEvent(OnRegistrationCompleteEvent event) {//事件发生后回调的方法System.out.println("监听"+event.getUser().toString());}
}

事件发布者

在业务层中注入publisher

@Service
public class UserServiceImpl  implements IUserService {@AutowiredUserMapper userMapper;
@Autowired
private ApplicationEventPublisher publisher;public ResponseResult insert(User record) {userMapper.insert(record);publisher.publishEvent(new OnRegistrationCompleteEvent(record));return ResponseResult.success(record);}}

ApplicationEventPublisher是ApplicationContext的父接口之一。这接口的作用是:Interface that encapsulates event publication functionality.

功能就是发布事件,也就是把某个事件告诉的所有与这个事件相关的监听器。
  
现在插入一条数据进行测试:

如果删掉 publisher.publishEvent(new OnRegistrationCompleteEvent(record));这句话会发现事件并没有被监听

改用@EventListener注解:

修改上面的监听类,不再继承ApplicationListener

@Componentpublic class EmailSendListener  {@NonNull@EventListener(classes=OnRegistrationCompleteEvent.class)public void onApplicationEvent(OnRegistrationCompleteEvent event) {//事件发生后回调的方法System.out.println("监听"+event.getUser().toString());}
}

再次插入数据:

一样可以起到监听作用。

总结

目前结论:需要自定义事件,监听者,发布者。
监听者类需要加@component注解交由spring管理,可以选择继承ApplicationEvent 也可以加@EventListener注解的方式
发布者发布事件后所有监听器将能接收到信息,回调监听到以后的方法
基本上牵涉到事件(Event)方面的设计,就离不开观察者模式,ApplicationContext 的事件机制主要通过 ApplicationEvent 和 ApplicationListener 这两个接口来提供的,和 Java swing 中的事件机制一样。即当 ApplicationContext 中发布一个事件时,所有扩展了 ApplicationListener 的 Bean都将接受到这个事件,并进行相应的处理。

ApplicationContext 扩展了 ResourceLoader(资源加载器)接口,从而可以用来加载多个Resource,而 BeanFactory 是没有扩展 ResourceLoader

springboot中使用ApplicationListener和ApplicationEvent /@EventListener监听事件相关推荐

  1. springboot+flowable第四节(设置监听事件)

    目录 1. 执行监听事件写法 2. 任务监听事件写法 3. 创建流程 4. 事件执行类 5. 启动流程 监听事件分为:执行监听.任务监听. 1. 执行监听事件写法 <flowable:execu ...

  2. android 常用的监听器,Android中的Keyboard监听事件

    前言 有关Keyboard监听事件,无非就是以下这几种情况: 1,操作显示或隐藏键盘: 2,判断当前键盘的状态: 3,键盘显示或隐藏后的拦截处理: 只要有使用到EditText,避免不了肯定会遇到以上 ...

  3. wireshark提取流量包中的文件_从Wireshark监听的数据中提取需要的数据

    最近,需要将wireshark监听的数据进行提取,分两步:首先,应该得出wireshark的数据包吧,在图形化界面中可以非常直观的将监听数据进行存储,但是这样需要手动操作非常麻烦,而且容易出错(随着处 ...

  4. html中下拉列表监听事件,ExtJS 下拉框监听事件、日期选择器监听事件、实现动态给items添加删除数据...

    本文将为您描述ExtJS 下拉框监听事件.日期选择器监听事件.实现动态给items添加删除数据,具体实现方法: 1.下拉框 下拉框选择时,触发事件的方法: 在 Ext.form.ComboBox 组件 ...

  5. angularjs中 $watch 和$on 2种监听的区别?

    1.$watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEq ...

  6. [js] 在设置keyup监听事件后按F5刷新和按浏览器中刷新键刷新有什么区别?

    [js] 在设置keyup监听事件后按F5刷新和按浏览器中刷新键刷新有什么区别? 按浏览器中刷新键刷新不会触发keyup事件 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定 ...

  7. Android中识别手柄JAVA_android蓝牙手柄监听 BluetoothGamepad

    最近工作中遇到蓝牙手柄开发的项目,自己走了一些弯路,查阅了一些资料,分享出来 1 蓝牙连接 系统手动连接和代码连接( scan 得到回调,连接对应的Service uuid,再去对应的特征值uuid, ...

  8. html中单选按钮设置监听事件,浅谈监听单选框radio改变事件(和layui中单选按钮改变事件),单选框radio...

    浅谈监听单选框radio改变事件(和layui中单选按钮改变事件),单选框radio 若是只引用jquery的话,监听单选按钮改变事件如下: 男 女 $(document).ready(functio ...

  9. vue 点击事件传递多个参数_Vue子组件监听事件中传递参数的方法

    在子组件中,我们可以通过以下方式监听事件: v-on:click="$emit('funcName',a)" 如果需要传多个参数,可以通过以下方式: v-on:click=&quo ...

最新文章

  1. Python成长之路第一篇(4)_if,for,while条件语句
  2. 最新增值税商品税目编码表_大家好!我叫增值税!这是我的最新最全税率表
  3. php中文歌词,将酷狗krc歌词解析并转换为lrc歌词php源码
  4. Antd 多层Modal+Form组件嵌套 如何在父级组件中清空子级组件状态与数据?
  5. 美团败诉,赔偿饿了么 100 万元;华为 Mate X2 首发秒没;库克获 8 亿年终奖 | 极客头条...
  6. varnish与squid的比较
  7. hervorgehen ( aus ... )
  8. 深入解读Docker底层技术cgroup系列(4)——cgroup子系统cpu
  9. linux中安装微信开发者工具
  10. 悉尼大学计算机硕士健康科技,悉尼大学健康科学学院
  11. 发现一个识图比较厉害的网站
  12. word设置标题自动编号
  13. 亲测win10安装mac虚拟机+网络配置完整过程
  14. 新浪微博PC客户端(DotNet WinForm版)—— 初探
  15. word2vec中计算两个词的距离或者相似程度。
  16. 如何快速打造淘宝爆款
  17. 解决win10资源管理器关后电脑黑屏问题
  18. 三极管三种放大组态的比较?为什么共基频带宽呢?(硬件每日一题)
  19. 如何系统自学Java成功就业?
  20. ubuntu下以管理员权限开机自启动自己的程序

热门文章

  1. 1.搭建Spring环境
  2. python 并行计算库_Python 大规模数据存储与读取、并行计算:Dask库简述
  3. linux空指针异常能捕获到吗,一次kernel panic分析--空指针in handle_IRQ_event
  4. Linux显示5 9行的数据,Linux复习
  5. python 程序运行插件_如何使Python插件在Pluma中运行?
  6. php txt删除重复行,php – 删除文本文件中的重复行
  7. 七、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(上)
  8. 四、Go语言复合数据类型(上)
  9. 二十八、Pyspider 爬取链家网
  10. 【机器学习】银行贷款违约预测