用一个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 事件机制的底层原理。如果你对这个模式有更多的想法或问题,欢迎评论区留言

相关推荐
坐吃山猪4 小时前
SpringBoot01-配置文件
java·开发语言
我叫汪枫5 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
yaoxtao5 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
Swift社区6 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
DKPT7 小时前
JVM中如何调优新生代和老生代?
java·jvm·笔记·学习·spring
phltxy7 小时前
JVM——Java虚拟机学习
java·jvm·学习
seabirdssss9 小时前
使用Spring Boot DevTools快速重启功能
java·spring boot·后端
喂完待续9 小时前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升
benben0449 小时前
ReAct模式解读
java·ai