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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 从数据库导出数据到Excel表(jxl.jar)

    从数据库导出数据到Excel表(jxl.jar)

  • C# 税务电子发票接口开发「建议收藏」

    C# 税务电子发票接口开发「建议收藏」stringweixin2=””;weixin2+=”[{“;weixin2+=”\”Appkey\”:\”88\”,”;weixin2+=”\”OperationID\”:\”888\”,”;weixin2+=”\”Body\”:{“;weixin2+=”\”Xfxx\”:{“;weixin2+=”\”nsrsbh\”:\…

  • 深度自编码器原理_编码器原理

    深度自编码器原理_编码器原理自编码器的目标:使用少量高阶特征重构输入定义:使用自身的高阶特征编码自己思想:自编码器其实也是一种神经网络,他的输入和输出一致的,借助稀疏编码的思想,目标是使用高阶特征重新组合来重构自己。特点:期望输入和输出一致;希望使用高阶特征来重构自己,而不只是复制像素点。Hinton提出基于信念网络(deepbeliefNetwords,DBN,由多层RBM堆叠而成)可以使用无监督学习逐层训练的贪心算法…

  • 无人驾驶感知篇之超声波雷达

    无人驾驶感知篇之超声波雷达昨天上海又新增了快六千多例,早上醒来的第一眼都很关注,这个时候,在想如果无人驾驶送餐车在各个街道行驶送餐那该多好,希望这一天能早点到来,让无人驾驶遍布咱们生活的每个角落。OK,言归正传,首先讲讲什么是超声波雷达。1.什么是超声波雷达安装在汽车周边的超声波雷达,主要用于倒车时的防撞报警系统,又俗称倒车雷达。超声波是一种在弹性介质中的机械振荡,纵向分辨率较高,对色彩、光照、电磁场不敏感,因此超声波测距系统对于黑暗,有灰尘或者烟幕、有毒等恶劣环境有很强的适应能力。超声波测距…

  • Vlc for Android 全面阐述

    Vlc for Android 全面阐述

  • 机器学习之局部加权、岭回归和前向逐步回归

    回归是对一个或多个自变量和因变量之间的关系进行建模,求解的一种统计方法,之前的博客中总结了在线性回归中使用最小二乘法推导最优参数的过程和logistic回归,接下来将对最小二乘法、局部加权回归、岭回归

    2021年12月30日

发表回复

您的电子邮箱地址不会被公开。

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