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月19日
    8
  • eclipse更换jdk版本[通俗易懂]

    1.Window—Preferences—Java—Compiler—右侧面板设置为1.62.Window—Preferences—Java—InstalledJREs—右侧面板“Add”本地的1.6版本jdk路径,并勾上以上已经完成eclipse的jdk的变更3.在你需要变更jdk版本的项目右键选择可以编辑你的jdk和添加jdk4.与JavaBuildPath同级目录下…

    2022年4月16日
    647
  • 高德地图实现多点标注marker和动态信息窗体[通俗易懂]

    高德地图实现多点标注marker和动态信息窗体[通俗易懂]先说一下项目对地图的需求:在后台新增地图管理模块,要求,每一辆车都在地图上有标注,而且点击标注时要显示出车辆的相关信息,比如车牌和车辆的当前状态。下图就是实现的效果。当然从高德地图api也能查看到这一块,比如多点标注,简单信息窗体,这些都有api,可以先看官网的,然后,再看我这篇文章,怎么融合一起,记住数据全部来自后台数据库,这样才能保证一切数据都是动态的,可实时更新的。首

    2022年5月11日
    77
  • 文件读写的理论

    文件读写的理论

    2022年1月20日
    41
  • myeclipse 8.5注册码_激活码有效期

    myeclipse 8.5注册码_激活码有效期注册码如下:Subscriber:sojson.comSubscriberCode:fLR8ZC-855550-7550535783763475 步骤:MyEclipse—-&gt;SubscriptionInformation—-&gt;对应输入以上内容finish即可

    2022年9月29日
    3
  • 文本聚类简单实现_文本聚类分析

    文本聚类简单实现_文本聚类分析引用:CoreConcepts—gensim<<自然语言处理入门>>一、简介文本聚类(textclustering,也称文档聚类或documentclustering)指的是对文档进行的聚类分析,被广泛用于文本挖掘和信息检索领域。最初文本聚类仅用于文本归档,后来人们又挖掘出了许多新用途,比如改善搜索结果、生成同义词,等等。在文本的预处理中,聚类同样可以发挥作用比如在标注语料之前,通常需要从…

    2025年6月28日
    4

发表回复

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

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