博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot 之事件(Event)
阅读量:5936 次
发布时间:2019-06-19

本文共 2346 字,大约阅读时间需要 7 分钟。

hot3.png

Spring 官方文档翻译如下 :

ApplicationContext 通过 ApplicationEvent 类和 ApplicationListener 接口进行事件处理。 如果将实现 ApplicationListener 接口的 bean 注入到上下文中,则每次使用 ApplicationContext 发布 ApplicationEvent 时,都会通知该 bean。 本质上,这是标准的观察者设计模式。

Spring的事件(Application Event)其实就是一个观察者设计模式,一个 Bean 处理完成任务后希望通知其它 Bean 或者说 一个Bean 想观察监听另一个Bean的行为。

Spring 事件只需要几步:

  • 自定义事件,继承 ApplicationEvent
  • 定义监听器,实现 ApplicationListener 或者通过 @EventListener 注解到方法上
  • 定义发布者,通过 ApplicationEventPublisher

代码示例:

1. 自定义Event

@Datapublic class DemoEvent extends ApplicationEvent {    private Long id;    private String message;    public DemoEvent(Object source, Long id, String message) {        super(source);        this.id = id;        this.message = message;    }}

2. 监听器

  • 实现ApplicationListener 接口
@Componentpublic class DemoListener implements ApplicationListener
{ @Override public void onApplicationEvent(DemoEvent demoEvent) { System.out.println(">>>>>>>>>DemoListener>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); System.out.println("收到了:" + demoEvent.getSource() + "消息;时间:" + demoEvent.getTimestamp()); System.out.println("消息:" + demoEvent.getId() + ":" + demoEvent.getMessage()); }}

泛型为需要监听的事件类型

  • @EventListener
@Componentpublic class DemoListener2 {    @EventListener    public void onApplicationEvent(DemoEvent demoEvent) {        System.out.println(">>>>>>>>>DemoListener2>>>>>>>>>>>>>>>>>>>>>>>>>>>>");        System.out.println("收到了:" + demoEvent.getSource() + "消息;时间:" + demoEvent.getTimestamp());        System.out.println("消息:" + demoEvent.getId() + ":" + demoEvent.getMessage());    }}

参数为需要监听的事件类型

3. 消息发布者

@Componentpublic class DemoPublisher {    private final ApplicationContext applicationContext;    @Autowired    public DemoPublisher(ApplicationContext applicationContext) {        this.applicationContext = applicationContext;    }    public void publish(long id, String message) {        applicationContext.publishEvent(new DemoEvent(this, id, message));    }}

4. 测试方法

@Testpublic void publisherTest() {    demoPublisher.publish(1L, "成功了!");}

5.结果

>>>>>>>>>DemoListener2>>>>>>>>>>>>>>>>>>>>>>>>>>>>收到了:com.jiuxian.publisher.DemoPublisher@3a62c01e消息;时间:1551762322376消息:1:成功了!>>>>>>>>>DemoListener>>>>>>>>>>>>>>>>>>>>>>>>>>>>收到了:com.jiuxian.publisher.DemoPublisher@3a62c01e消息;时间:1551762322376消息:1:成功了!

6. 示例源码

转载于:https://my.oschina.net/u/3555293/blog/3018072

你可能感兴趣的文章
杭电1016--Prime Ring Problem(Dfs)
查看>>
java程序员笑不死的经历ส้้้้้้้้้
查看>>
配置samba
查看>>
【Android笔记】入门篇01:快速设计用户界面
查看>>
linux下的常用技巧。
查看>>
windows远程连接失败问题排查思路
查看>>
php-fpm配置
查看>>
c++头文件和#include 学习笔记
查看>>
第四天(考试)
查看>>
jquery.maskload.js学习笔记
查看>>
关于VUE的路由地址问题
查看>>
day3修改配置文件
查看>>
node-buffer解读
查看>>
Vue 2.x折腾记 - (22) Vue 打包图片在safari不显示的问题
查看>>
ES6中的class
查看>>
基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(二)
查看>>
iOS - swift项目接入bugly - 报错, 配置符号表,下载Java环境,
查看>>
一个前端的MONGO救赎--1
查看>>
oracle sql语句实现累加、累减、累乘、累除
查看>>
【STSRM12】整除
查看>>