前言

想必你一定为两个 Bean 之间基于耗时事件处理的通知和处理顺序而困扰吧,有困扰没事,不要憋在肚子里,早已经有先驱们发现了痛点并设计出了解决方案——Application Event。(了解 Android 的朋友们可以联想一下 EventBus)

Spring Application Event

Spring 的事件(Application Event)为 Bean 与 Bean 之间的消息通信提供了支持。当一个 Bean 处理完一个任务之后,希望另一个 Bean 知道并能做相应的处理,这时我们就需要让另一个 Bean 监听当前 Bean 所发送的时间。(观察者模式)

Spring 的事件需要遵循以下流程:

自定义事件,集成 ApplicationEvent。

定义事件监听器,实现 ApplicationListener。

使用容器发布事件。

Talk Is Cheap,Show Me Code

以下代码基于 Spring Boot 实现

1. 自定义事件

public class DemoEvent extends ApplicationEvent {

private static final long serialVersionUID = 1L;

private String msg;

public DemoEvnet(Object source, String msg) {

super(source);

this.msg = msg;

}

public String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

}

2. 事件监听者

@Component

public class DemoListener implements ApplicationListener {

public void onApplicationEvent(DemoEvent event) {

String msg = event.getMsg();

System.out.println("接收到了消息:" + msg);

}

}

代码解释:

实现 ApplicaionListener 接口,并制定监听的时间类型。

使用 onApplicationEvent 方法对消息进行接收处理。

3. 事件发布者

@Component

public class DemoPublisher {

@Autowired

ApplicationContext applicationContext;

public void publish(String msg) {

applicaionContext.publishEvent(new DemoEvent(this, msg));

}

}

代码解释:

注入 ApplicaionContext 用来发布事件。

使用 ApplicaionContext 的 publishEvent 方法来发布。

4. 配置类

@Configuration

@ComponentScan("{package}")

public class EventConfig {

}

5. 运行示例

public class Main {

public static void main(String[] args) {

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);

DemoPublisher demoPublisher = context.getBean(DemoPublisher.class);

demoPublisher.publish("Hello Application Context!");

context.close();

}

}

写在最后

不要只是看看就好,动手敲敲代码,Run 一次,看看控制台的输出。

这只是一个最简单、最基本的 Demo,大家看过之后可以发散自己的想法,模拟一个复杂的业务场景来建立一个可以让事件(Application Event)大展拳脚的舞台吧,只有实战才出真知。

java spring eventbus_Spring 事件:Application Event相关推荐

  1. java spring eventbus_spring集成guava的event bus

    Guava的event bus guava, https://github.com/google/guava 是一个非常有名的Java类库,提供了很多在日常开发中常用的集合.函数接口等.此外,guav ...

  2. spring boot: 一般注入说明(五) @Component, application event事件为Bean与Bean之间通信提供了支持...

    spring的事件,为Bean与Bean之间通信提供了支持,当一个Bean处理完成之后,希望另一个Bean知道后做相应的事情,这时我们就让另外一个Bean监听当前Bean所发送的事件. spring的 ...

  3. Spring Boot 之事件(Event)

    1.美图 2.概述 ApplicationContext 通过 ApplicationEvent 类和 ApplicationListener 接口进行事件处理. 如果将实现 ApplicationL ...

  4. Java Spring Data Redis实战与配置参数详解 application.properties...

    Redis作为开源分布式高并发缓存,使用范围非常广泛,主流互联网公司几乎都在使用. Java Spring Boot 2.0实战开发Redis缓存可以参考下面的步骤,Redis安装可以直接使用Linu ...

  5. Spring事件机制Event源码解析(未完待续)

    Spring事件机制Event源码解析(未完待续) 监听器: ApplicationEvent事件 ApplicationListener监听器(观察者) ApplicationEventMultic ...

  6. Java Spring Data Redis实战与配置参数详解 application.properties

    Redis作为开源分布式高并发缓存,使用范围非常广泛,主流互联网公司几乎都在使用. Java Spring Boot 2.0实战开发Redis缓存可以参考下面的步骤,Redis安装可以直接使用Linu ...

  7. JAVA script 循环 图片_深入分析JavaScript 事件循环(Event Loop)

    事件循环(Event Loop),是每个JS开发者都会接触到的概念,但是刚接触时可能会存在各种疑惑. 众所周知,JS是单线程的,即同一时间只能运行一个任务.一般情况下这不会引发问题,但是如果我们有一个 ...

  8. Spring之事件监听

    spring的监听事件模型应该是观察者模式.本人项目里的应用在process方法按日期同步某个库的数据,在方法最后publish一个event事件,这个事件用于后续同步过来的数据处理.事件处理采用了s ...

  9. Spring的事件发布机制

    一:Spring的事件发布 ApplicationContext提供了针对Bean的事件传播功能,其中的主角是publishEvent()方法,通过这个方法可以将事件通知给系统内的监听器(需实现App ...

最新文章

  1. iOS UI基础-6.0 UIActionSheet的使用
  2. html网络,HTML—构建网络
  3. python numpy np.array_Python | numpy | np.split()与np.array_split()函数
  4. [vue] 说说你对keep-alive的理解是什么?
  5. vm中linux物理内存不足解决方案
  6. Js整理工具-开发必备
  7. vue-cli+gitlab代码管理时,vue项目配置文件设置
  8. Packet Voice Modeling 语音包模型
  9. 【JAVA】数据结构——堆的排序及相关面试题
  10. 好用的倒计时APP 可以同时开多个倒数计时器的便签
  11. 国外优秀的屏幕录象专家
  12. linux apache找不到woff2,IIS Web部署: svg/woff/woff2字体找不到
  13. 绝对最大额定值(ABSOLUTE MAXIMUM RATINGS: ABS)是否可以超过
  14. 安装驱动显卡重启计算机,Win7电脑安装显卡驱动后一直重启的解决方法
  15. 算法.动态规划 导航/数塔取数字问题
  16. Five I/O Models
  17. 【无标题】UBUNTU22.04 WIFI图标显示
  18. Hbase数据库完全分布式搭建以及java中操作Hbase
  19. Android AlarmManagerService TIME_TICK 广播发送流程
  20. 博客——使用 Redis 实现博客编辑的自动保存草稿功能

热门文章

  1. 华中科技大学计算机组成原理实验,单总线CPU设计(变/定长指令周期3级时序)(HUST),logisim,educoder
  2. Windows平台的x64dbg插件合集
  3. 2019牛客暑期多校训练营(第三场)H.Magic Line
  4. 【转载】刘未鹏---我在南大的七年
  5. 闪电邮验证服务器错误,网易、闪电邮如何错误查询
  6. 用python画一朵玫瑰花,送给你的女神
  7. python画一朵玫瑰花,制作成可执行文件
  8. Java项目:SSH羽毛球馆管理系统
  9. 监控平台实践(三)Telegraf 实现组件监控
  10. 使用Dreamweaver轻松实现网页中透明Flash效果