spring事件监听(eventListener)

spring事件监听(eventListener)原理:观察者模式#spring的事件监听有三个部分组成,事件(ApplicationEvent)、监听器(ApplicationListener)和事件发布操作。事件#事件类需要继承ApplicationEvent,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

原理:观察者模式#

 

spring的事件监听有三个部分组成,事件(ApplicationEvent)、监听器(ApplicationListener)和事件发布操作。

事件#

事件类需要继承ApplicationEvent,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

public class HelloEvent extends ApplicationEvent {

 

    private String name;

 

    public HelloEvent(Object source, String name) {

        super(source);

        this.name = name;

    }

 

    public String getName() {

        return name;

    }

}

  

这里为了简单测试,所以写的很简单。

事件类是一种很简单的pojo,除了需要继承ApplicationEvent也没什么了,这个类有一个构造方法需要super。

事件监听器#

1

2

3

4

5

6

7

8

9

10

@Component

public class HelloEventListener implements ApplicationListener<HelloEvent> {

 

    private static final Logger logger = LoggerFactory.getLogger(HelloEventListener.class);

 

    @Override

    public void onApplicationEvent(HelloEvent event) {

        logger.info("receive {} say hello!",event.getName());

    }

}

  

事件监听器需要实现ApplicationListener接口,这是个泛型接口,泛型类类型就是事件类型,其次需要是spring容器托管的bean,所以这里加了@component,只有一个方法,就是onApplicationEvent。

事件发布操作#

有了事件和监听器,不发布事件也不用,事件发布方式很简单

1

applicationContext.publishEvent(new HelloEvent(this,"lgb"));

  

然后调用方法就能看到

1

2018-10-02 19:08:00.052  INFO 284928 --- [nio-5577-exec-3] l.b.e.c.s.event.HelloEventListener       : receive lgb say hello!

  

疑问#

  1. 同样的事件能有多个监听器 — 经过测试是可以的
  2. 事件监听器一定要写一个类去实现吗 — 其实是可以不需要的,spring有个注解@EventListener,修饰在方法上,稍后给出使用方法
  3. 事件监听操作和发布事件的操作是同步的吗? — 是的,所以如果有事务,监听操作也在事务内

使用@EventListener注解#

先给出代码

1

2

3

4

@EventListener

public void listenHello(HelloEvent event) {

    logger.info("listen {} say hello from listenHello method!!!",event.getName());

}

  

EventListener这个注解其实可以接受参数来表示事件源的,有两个参数classes和condition,顾明思议前者是表示哪一个事件类,后者是当满足什么条件是会调用该方法,但其实都可以不用用到,直接在方法上写参数HelloEvent就行

 

 

出处:https://www.cnblogs.com/itplay/p/10982072.html

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234122.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月11日 上午10:15
下一篇 2025年6月11日 上午10:43


相关推荐

  • LabVIEW图像分割算法(基础篇—6)

    LabVIEW图像分割算法(基础篇—6)图像分割是简化机器视觉算法的有效手段之一。它将图像分成一些有意义的区域,以便特征提取过程可基于这些区域提取目标的特征。

    2022年5月20日
    54
  • 关于JavaScript 通讯加密的浅析(CryptoJs各种加密算法)

    关于JavaScript 通讯加密的浅析(CryptoJs各种加密算法)暂时支持的算法:MD5SHA-1SHA-256AESRabbitMARC4HMACHMAC-MD5HMAC-SHA1HMAC-SHA256PBKDF2相关的链接网址如下:http://blog.csdn.net/wangcunhuazi/article/details/41491995

    2022年5月2日
    55
  • 以太网PHY层芯片LAN8720A简介

    以太网PHY层芯片LAN8720A简介1、LAN8720A简介2、芯片管脚配置3、硬件电路

    2022年6月16日
    94
  • 封装 继承 多态理解

    封装 继承 多态理解一 封装 1 定义封装 将类的某些信息隐藏在类内部 private 不允许外部程序直接访问 而是通过该类提供的公共属性 public 来实现对隐藏信息的操作和访问快捷键 prop TABpropfull TAB2 封装的好处 1 隐藏类的实现细节 2 只能通过规定属性访问数据 3 方便加入控制语句 4 方便修改实现二 继承 2 1 定义继承 一个类具有另一个类的属性和方法 这个类叫子类 派生类 另一个类叫父类 基类 超类 继承的关键符号 冒号

    2026年3月17日
    2
  • 什么是单点登录(原理与实现简介)

    什么是单点登录(原理与实现简介)一、单系统登录机制1、http无状态协议  web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系  但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必…

    2022年7月27日
    8
  • 高中信息技术教师资格考取流程和感想

    高中信息技术教师资格考取流程和感想高中信息技术教师资格考取流程和感想偶然发现 咱们 51CTO 比较少信息技术教师方面的文章 刚好我在这方面做了尝试 那就写写 分享自己的经历给大家参考一下吧 转行一段时间 久不接触代码与运维 2018 年某天 想找点相关知识练练手 恰好表弟也读大三也在考这个证 于是我就在一边陪考一边练手的心态中走完了整个教师资格证的考试流程 高中信息技术教师资格 可以教高中 初中 小学的信息技术课 但不能执教于职业

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号