欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

SpringBoot事件发布和监听详解

时间:2022-10-01 13:36:07|栏目:JAVA代码|点击:

概述

ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。事件监听的作用与消息队列有一点类似。

事件监听的结构

主要有三个部分组成:

  1. 发布者Publisher
  2. 事件Event
  3. 监听者Listener

Publisher,Event和Listener的关系

事件

我们自定义事件MyTestEvent继承了ApplicationEvent,继承后必须重载构造函数,构造函数的参数可以任意指定,其中source参数指的是发生事件的对象,一般我们在发布事件时使用的是this关键字代替本类对象,而user参数是我们自定义的注册用户对象,该对象可以在监听内被获取。

@Getter
public class MyTestEvent extends ApplicationEvent {
    private static final long serialVersionUID = 1L;
    private User user;

    public MyTestEvent(Object source, User user) {
        super(source);
        this.user = user;
    }
}

发布者

事件发布是由ApplicationContext对象管控的,我们发布事件前需要注入ApplicationContext对象调用publishEvent方法完成事件发布。

ApplicationEventPublisher applicationEventPublisher 虽然声明的是ApplicationEventPublisher,但是实际注入的是applicationContext

@RestController
@RequestMapping("/test")
public class TestController {
    @Autowired
    ApplicationContext applicationContext;
    @Autowired
    ApplicationEventPublisher applicationEventPublisher;

    @GetMapping("testEvent")
    public void test() {
        applicationEventPublisher.publishEvent(new MyTestEvent("dzf-casfd-111", new User("dzf-625096527-111", "xiaoming", 19)));
        applicationEventPublisher.publishEvent(new MyTestEvent("dzf-49687489-111", new User("dzf-625096527-111", "xiaowang", 20)));
    }


}

监听者

面向接口编程,实现ApplicationListener接口

@Component
public class MyTestListener implements ApplicationListener<MyTestEvent> {

    @Override
    public void onApplicationEvent(MyTestEvent myTestEvent) {
        System.out.println("MyTestListener : " + myTestEvent.getUser());
    }
}

使用@EventListener注解配置

@Component
public class MyTestListener2{

    @EventListener(MyTestEvent.class)
    public void onApplicationEvent(MyTestEvent myTestEvent) {
        System.out.println("MyTestListener2:" + myTestEvent.getUser());
    }
}

总结

上一篇:Quarkus集成Dubbo服务Rpc远程通讯框架整合

栏    目:JAVA代码

下一篇:MyBatis 和 jeesite多表查询示例详解

本文标题:SpringBoot事件发布和监听详解

本文地址:http://www.codeinn.net/misctech/215186.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有