当前位置: 首页 > news >正文

使用Spring事件机制,合理的进行业务解耦

文章目录

  • 事件机制介绍
  • 一、事件源类
  • 二、事件监听类
    • 1.方式一:自定义类实现 ApplicationListener 接口:
    • 1.方式二:通过注解去标记事件消费方法:
  • 三、事件发布


事件机制介绍

事件发布流程中,有三个核心概念,他们之间的关系如下图:
在这里插入图片描述

  • 事件源(ApplicationEvent):这个就是你要发布的事件对象。

  • 事件发布器(ApplicationEventPublisher):这是事件的发布工具。

  • 事件监听器(ApplicationListener):这个相当于是事件的消费者。


一、事件源类

这里我只是额外定义了一个 name 属性,如果大家在事件发送的时候需要传递的数据比较多,那么就可以在这里定义更多的属性(或者对象)。

public class MyEvent extends ApplicationEvent {
    private String name;
    public MyEvent(Object source, String name) {
        super(source);
        this.name = name;
    }

    @Override
    public String toString() {
        return "MyEvent{" +
                "name='" + name + '\'' +
                "} " + super.toString();
    }
}

在具体实践中,事件源并非一定要继承自 ApplicationEvent,事件源也可以是一个普通的 Java 类,如果是普通的 Java 类,系统会自动将之封装为一个 PayloadApplicationEvent 对象去发送。

二、事件监听类

1.方式一:自定义类实现 ApplicationListener 接口:

@Component
public class MyEventListener implements ApplicationListener<MyEvent> {
    @Override
    public void onApplicationEvent(MyEvent event) {
        System.out.println("event = " + event);
    }
}

1.方式二:通过注解去标记事件消费方法:

@Component
public class MyEventListener02 {
    @EventListener(value = MyEvent.class)
    public void hello(MyEvent event) {
        System.out.println("event02 = " + event);
    }
}

三、事件发布

    @Resource
    private ApplicationContext applicationContext;
    
    public void testEvent(){
    applicationContext.publishEvent(new MyEvent(this, "javaboy"));
    }
	

相关文章:

  • Skywalking(9.7.0) 告警配置
  • 【研发日记】,Matlab/Simulink开箱报告(十)——Requirements Toolbox
  • 【PHP+代码审计】PHP基础——流程控制
  • Mysql数据库的优点
  • 去除PDF论文行号的完美解决方案
  • docker容器镜像管理+compose容器编排(持续更新中)
  • spring-boot-maven-plugin springboot打包配置问题
  • Hibernate是如何处理事务的?请描述一下Hibernate的事务管理。Hibernate中的缓存机制是怎样的?如何配置和使用缓存?
  • 爆肝整理万能sass框架:react18+webpack5+typescript+ant Design,框架在手,交付无忧!!!
  • 2024 GoLand激活,分享几个GoLand激活的方案
  • SOLIDWORKS 2024新版价格 SOLIDWORKS2024专业版白金版多少钱?
  • Windows C++ 任意线程通过hwnd将操作发送到UI线程执行
  • window mysql 安装出现的问题
  • 防火墙中的SNAT 与DNAT
  • 网络流量监控软件AnaTraf:优化性能、排除故障的最佳选择
  • 每日leetcode--接雨水
  • PyTorch之完整的神经网络模型训练
  • 算法模版总结
  • 蓝桥杯[OJ 3412]-最小化战斗力差距-CPP-贪心
  • 大语言模型(LLM) RAG概念
  • 夜读丨取稿费的乐趣
  • 男子发寻母视频被警方批评教育,律师:发寻亲信息是正当行为
  • 哈佛新论文揭示 Transformer 模型与人脑“同步纠结”全过程!AI也会犹豫、反悔?
  • 巴军事行动致印度70%电网瘫痪
  • 华泰柏瑞基金总经理韩勇因工作调整卸任,董事长贾波代为履职
  • 重视体重管理,筑牢健康基石