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

相关推荐
vx_vxbs669 分钟前
【SSM电影网站】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·python·mysql·小程序·php·idea
SunnyDays101132 分钟前
如何使用 Java 删除 Word 文档中的水印
java·删除word文档水印
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于Java企业人事工资管理系统为例,包含答辩的问题和答案
java·开发语言
转转技术团队1 小时前
回收系统架构演进实战:与Cursor结对扫清系统混沌
java·架构·cursor
AI分享猿1 小时前
Java后端实战:SpringBoot接口遇异常请求,轻量WAF兼顾安全与性能
java·spring boot·安全
稚辉君.MCA_P8_Java1 小时前
Gemini永久会员 Java中的四边形不等式优化
java·后端·算法
DKPT2 小时前
ZGC和G1收集器相比哪个更好?
java·jvm·笔记·学习·spring
n***F8752 小时前
修改表字段属性,SQL总结
java·数据库·sql
q***69772 小时前
【Spring Boot】统一数据返回
java·spring boot·后端
Hollis Chuang2 小时前
Spring Boot 4.0 正式发布,人麻了。。。
java·spring boot·后端·spring