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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [Android]Activity跳转传递任意类型的数据、Activity为SingleTask时代替StartActivityForResult的解决方案…

    [Android]Activity跳转传递任意类型的数据、Activity为SingleTask时代替StartActivityForResult的解决方案…

    2021年9月5日
    48
  • linux navicat 在线激活码 2021(注册激活)

    (linux navicat 在线激活码 2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsaWNlbnNlSW…

    2022年3月27日
    222
  • C语言:判断回文字符串的两种简单方法

    C语言:判断回文字符串的两种简单方法我的机器学习教程「美团」算法工程师带你入门机器学习已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~之前写…

    2022年6月6日
    19
  • javascript正则表达式 教程_js正则表达式匹配字符串

    javascript正则表达式 教程_js正则表达式匹配字符串JavaScript正则表达式的模式匹配引言正文一、正则表达式定义引言其实我写这篇文章的话,主要是想自己重新复习一遍正则表达式。我们也知道正则表达式在很多语言中都是通用的,所以学好这个好处很多。接下来,就跟我一起来学习一下正则表达式,从0到入门吧。正文一、正则表达式定义正则表达式(regularexpression)是一个描述字符模式的对象,简单点来讲就是通过正则表达式规定的模式,…

    2022年9月20日
    0
  • GBDT算法原理_描述算法的工具

    GBDT算法原理_描述算法的工具一.前言在AdaBoost基本原理与算法描述中,我们介绍了AdaBoost的基本原理,本篇博客将介绍boosting系列算法中的另一个代表算法GBDT(GradientBoostingDecisionTree,梯度提升树)算法。这里对GBDT的学习做一个总结,也希望对有帮助的同学能有一个帮助。在介绍AdaBoost的时候我们讲到了,AdaBoost算法是模型为加法模型,损失函数为指…

    2022年10月12日
    0
  • Android屏幕适配全攻略(最权威的官方适配指导)[通俗易懂]

    Android屏幕适配全攻略(最权威的官方适配指导)[通俗易懂]Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因、重要概念、解决方案及最佳实践,我相信如果你能认真的学习本文,对于Android的屏幕适配,你将不再有疑惑!Android屏幕适配出现的原因在

    2022年5月29日
    33

发表回复

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

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