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

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

  1. 自定义事件,集成ApplicationEvent。
  2. 定义事件监听器,实现ApplicationListener。
  3. 使用容器发布事件。

一、自定义事件

  1. package com.cenobitor.appevent.event;
  2.  
  3. import org.springframework.context.ApplicationEvent;
  4.  
  5. public class DemoEvent extends ApplicationEvent {
  6.  
  7. private static final long serialVersionUID = 1L;
  8. private String msg;
  9.  
  10. public DemoEvent(Object source,String msg) {
  11. super(source);
  12. this.msg = msg;
  13. }
  14.  
  15. public String getMsg() {
  16. return msg;
  17. }
  18.  
  19. public void setMsg(String msg) {
  20. this.msg = msg;
  21. }
  22. }

二、事件监听器

  1. package com.cenobitor.appevent.listener;
  2.  
  3. import com.cenobitor.appevent.event.DemoEvent;
  4. import org.springframework.context.ApplicationListener;
  5. import org.springframework.stereotype.Component;

  6. //实现ApplicationListener接口,并指定监听的事件类型
  7. @Component
  8. public class DemoListener implements ApplicationListener<DemoEvent> {
  9.  
  10. @Override
      //使用onApplicationEvent方法对消息进行接收处理
  11. public void onApplicationEvent(DemoEvent demoEvent) {
  12. String msg = demoEvent.getMsg();
  13. System.out.println("(bean-demoListener)接收到了bean-demoPublisher发布的消息:"+msg);
  14. }
  15. }

三、事件发布类

  1. package com.cenobitor.appevent.publisher;
  2.  
  3. import com.cenobitor.appevent.event.DemoEvent;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.stereotype.Component;
  7.  
  8. @Component
  9. public class DemoPublisher {
  10. @Autowired
      //注入ApplicationContext用来发布事件
  11. ApplicationContext applicationContext;
  12.   //使用ApplicationContext的publishEvent方法来发布
  13. public void publish(String msg){
  14. applicationContext.publishEvent(new DemoEvent(this,msg));
  15. }
  16. }

四、运行

  1. package com.cenobitor.appevent;
  2.  
  3. import com.cenobitor.appevent.publisher.DemoPublisher;
  4. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  5.  
  6. public class Main {
  7. public static void main(String[] args) {
  8. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppeventApplication.class);
  9. DemoPublisher demoPublisher = context.getBean(DemoPublisher.class);
  10. demoPublisher.publish("hello application event");
  11. context.close();
  12. }
  13.  
  14. }

结果:(bean-demoListener)接收到了bean-demoPublisher发布的消息:hello application event

注:摘抄自《JavaEE开发的颠覆者SpringBoot 实战》。

SpringBoot -- 事件(Application Event)的更多相关文章

  1. Spring Boot实战笔记(四)-- Spring常用配置(事件Application Event)

    一.事件(Application Event) Spring的事件为Bean和Bean之间的消息通信提供了支持.当一个Bean处理完一个任务之后,希望另一个Bean知道并能做相应的处理,这时我们就需要 ...

  2. spring 事件(Application Event)

    spring 事件为bean 与 bean之间传递消息.一个bean处理完了希望其余一个接着处理.这时我们就需要其余的一个bean监听当前bean所发送的事件. spring事件使用步骤如下: 1.先 ...

  3. 精通SpringBoot--Spring事件 Application Event

    Spring的事件为Bean与Bean之间的通信提供了支持,当我们系统中某个Spring管理的Bean处理完某件事后,希望让其他Bean收到通知并作出相应的处理,这时可以让其他Bean监听当前这个Be ...

  4. CL_GUI_ALV_GRID 触发PAI事件(Application event)

    *&---------------------------------------------------------------------* *& Report Z_BARRY_A ...

  5. 从命令模式的维度理解Spring 之Application Event

    Spring的事件(Application Event)为Bean与Bean之间的信息通讯提供了支持.当一个Bean处理完一个任务之后,希望另一Bean指定并能做相应的处理,这时我们就需要让另外一个B ...

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

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

  7. Spring 事件:Application Event

    Spring Application Event Spring 的事件(Application Event)为 Bean 与 Bean 之间的消息通信提供了支持.当一个 Bean 处理完一个任务之后, ...

  8. SpringBoot事件监听器源码分析

    本文涉及到Spring的监听器,如果不太了解请先阅读之前的Spring监听器的文章. SpringBoot事件监听器初始化 SpringBoot中默认定义了11个事件监听器对象,全部定义在META-I ...

  9. Spring Application Event Example

    Spring Application Event 项目结构 工程下载 https://github.com/xiaoheike/SpringApplicationEventExample.git Sp ...

随机推荐

  1. “全栈2019”Java多线程第三十三章:await与signal/signalAll

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  2. cglib invoke 和 invokeSuper 可用的组合

    在深入字节码理解invokeSuper无限循环的原因中,我们理解的cglib的原理和其中一个合理的调用方式.但是这个调用方式是基于类的,对所有实例生效.实际场景中,我们可能只是希望代理某个具体的实例, ...

  3. springboot常用注解

    @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration注解.其中@ComponentScan让 ...

  4. 如何给wp(Windows phone)中搜索关键字加亮?

    问题来源 最近在群里看到群友讨论在wp中有个搜索功能,要求搜索关键字在搜索结果内容中加亮(即加颜色),由于wp中没有自带这样的控件,于是大家各抒自见,有人说用第三方控件,有人说用richtextbox ...

  5. Html 常见meta

    html 的meta标签对网页渲染及SEO搜索引擎起着不可忽视的作用.详细的写法一段时间不写,容易忘,所以整理了一下,方便需要时查看. <!DOCTYPE html> <!-- 使用 ...

  6. 坑爹的Sun JDK

    Sun的这个java.lang.Throwable 源码 设计非常糟糕,完全没有扩展性, 我在IBM 的Java JDK下,继承java.lang.Throwable重新定义了一个ExceptionW ...

  7. JAVA框架之Hibernate【Hibernate缓存详解】

    1.缓存介绍 Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存.这一级别的缓存由hibernate管理的,一般情况下无需进行干预:第二级别的缓 ...

  8. IdentityServer-Setup and Overview

    设置和概述 有两种方式创建一个IdentityServer 项目: 从零开始 使用Visual Studio的ASP.NET Identity模板 如果是从零开始,我们提供一序列的帮助及内存存储,所以 ...

  9. editplus tag

    #T=HTML<!DOCTYPE html><html lang="zh-CN"><head><meta content="te ...

  10. [原创]EF架构随心所欲打造属于你自己的DbModel

    前言 我们都知道EF可以生成Dbmodel,系统生成的Model有时候并不是我们想要的,如何我们要生成自己的Model,那么久需要我们手动的去修改T4模版,T4是对“Text Template Tra ...