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

相关推荐
LuckyLay5 分钟前
Spring学习笔记_34——@Controller
spring·controller
希忘auto6 分钟前
详解MySQL安装
java·mysql
冰淇淋烤布蕾17 分钟前
EasyExcel使用
java·开发语言·excel
拾荒的小海螺24 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
Jakarta EE40 分钟前
正确使用primefaces的process和update
java·primefaces·jakarta ee
马剑威(威哥爱编程)1 小时前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式
java—大象1 小时前
基于java+springboot+layui的流浪动物交流信息平台设计实现
java·开发语言·spring boot·layui·课程设计
ApiHug2 小时前
ApiSmart x Qwen2.5-Coder 开源旗舰编程模型媲美 GPT-4o, ApiSmart 实测!
人工智能·spring boot·spring·ai编程·apihug
杨哥带你写代码2 小时前
网上商城系统:Spring Boot框架的实现
java·spring boot·后端
camellias_2 小时前
SpringBoot(二十一)SpringBoot自定义CURL请求类
java·spring boot·后端