用一个demo辅助理解spring的事件机制

文章目录

  • 前言
  • [一、 定义事件类](#一、 定义事件类)
  • [二、 定义事件监听器接口](#二、 定义事件监听器接口)
  • [三. 定义事件发布者类](#三. 定义事件发布者类)
  • [四、 实现具体的监听器](#四、 实现具体的监听器)
  • [五、 将所有部件结合起来](#五、 将所有部件结合起来)
  • [六、 运行结果](#六、 运行结果)
  • 总结

前言

网上介绍spring事件机制的文章很多,非常难入门和理解。今天我们使用纯 Java 来手动实现一个类似于 Spring 事件机制的简单示例。这将帮助你理解其背后的观察者模式和发布-订阅机制的工作原理。

以下是一个简单的例子,展示如何用纯 Java 实现一个基本的事件发布和监听系统。

一、 定义事件类

首先,我们定义一个简单的事件类。这个类相当于 Spring 中的 ApplicationEvent

java 复制代码
class MyEvent {
    private final String message;

    public MyEvent(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

二、 定义事件监听器接口

接下来,我们定义一个事件监听器接口。所有监听器都要实现这个接口,相当于 Spring 中的 ApplicationListener

java 复制代码
interface MyEventListener {
    void onEvent(MyEvent event);
}

三. 定义事件发布者类

然后,我们定义一个事件发布者类,用来管理监听器并发布事件。

java 复制代码
import java.util.ArrayList;
import java.util.List;

class MyEventPublisher {
    private final List<MyEventListener> listeners = new ArrayList<>();

    // 注册监听器
    public void addListener(MyEventListener listener) {
        listeners.add(listener);
    }

    // 发布事件
    public void publishEvent(MyEvent event) {
        for (MyEventListener listener : listeners) {
            listener.onEvent(event);  // 通知所有监听器
        }
    }
}

四、 实现具体的监听器

接下来,实现几个具体的监听器,它们将对事件做出响应。

java 复制代码
class MyEventListenerImpl implements MyEventListener {
    private final String name;

    public MyEventListenerImpl(String name) {
        this.name = name;
    }

    @Override
    public void onEvent(MyEvent event) {
        System.out.println(name + " received event with message: " + event.getMessage());
    }
}

五、 将所有部件结合起来

最后,在主程序中注册监听器,并发布事件。

java 复制代码
public class EventDemo {
    public static void main(String[] args) {
        // 创建事件发布者
        MyEventPublisher publisher = new MyEventPublisher();

        // 注册几个监听器
        publisher.addListener(new MyEventListenerImpl("Listener 1"));
        publisher.addListener(new MyEventListenerImpl("Listener 2"));

        // 发布事件
        MyEvent event = new MyEvent("Hello, Event!");
        publisher.publishEvent(event);
    }
}

六、 运行结果

运行这段代码时,你将看到每个监听器都接收并处理了事件:

复制代码
Listener 1 received event with message: Hello, Event!
Listener 2 received event with message: Hello, Event!

总结

通过这个简单的纯 Java 示例,我们实现了一个基本的事件发布和监听系统。这与 Spring Boot 的事件机制有相似之处,但 Spring 的实现更为复杂和强大,提供了同步/异步处理、事件过滤、排序等高级功能。

这个例子展示了观察者模式的基本用法,也让你了解了 Spring Boot 事件机制的底层原理。如果你对这个模式有更多的想法或问题,欢迎评论区留言

相关推荐
小毛驴8509 分钟前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
DKPT41 分钟前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好奇的菜鸟2 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
DuelCode3 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社23 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
幽络源小助理3 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
猴哥源码3 小时前
基于Java+springboot 的车险理赔信息管理系统
java·spring boot
YuTaoShao4 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
Dcs5 小时前
超强推理不止“大”——手把手教你部署 Mistral Small 3.2 24B 大模型
java
东阳马生架构5 小时前
订单初版—1.分布式订单系统的简要设计文档
java