当前位置: 首页 > 图灵资讯 > 技术篇> 浅谈事件驱动机制

浅谈事件驱动机制

来源:图灵教育
时间:2023-04-02 17:42:11

事件驱动机制是指在连续事务管理过程中做出决策的策略,即调动可用资源,执行相关任务,解决持续问题,防止事务积累。应用于计算机编程、公共关系、经济活动等领域。

所谓事件驱动,简而言之也就是你点什么按钮(即发生什么事件),电脑执行什么操作(即调用什么函数).当然,事件不仅限于用户的操作. 事件驱动的核心自然是事件。从事件的角度来看,事件驱动程序的基本结构是由事件收集器、事件发送器和事件处理器组成的。事件收集器负责收集所有事件,包括用户(如鼠标、键盘事件等)、硬件(如时钟事件等)和软件(如操作系统、应用程序本身等)。).事件发送器负责将收集器收集到的事件分发给目标对象。事件处理器往往要到实现阶段才能完全确定具体的事件响应工作,因此需要使用虚拟函数机制。事件驱动架构由事件、事件处理器和事件循环三个基本组件组成。事件发生后发送给事件循环,事件循环将每个事件分配给每个事件处理器。事件A由处理器A处理,事件B由处理器B处理。对于框架用户,他们能看到的是事件处理器,这也是他们可以操作的地方

事件驱动的一种常见形式是发布-订阅模式。事件驱动机制的耦合度相对较高。在跨过程通信室,我们通常使用介绍 MQ (消息队列) 为了实现新闻的发布和订阅。目前,在主流应用的架构中,大型分布式系统的解耦采用了新闻发布-订阅模式。同时,数据制作人与用户分离 MQ 它还可以起到削峰的作用。在同一过程中,这种事件驱动机制往往需要逻辑解耦。利用事件机制

事件机制主要由事件源、事件对象、监听器三部分组成。具体描述如下: - 事件来源:事件发生的起源 - 事件对象:事件实体,事件对象将持有事件源 - 监控器:监控事件对象,处理事件对象

Java 与事件相关的界面定义包括以下两个:

  1. EventObject: 自定义事件对象需要继承这类事件
  2. EventListener: 事件监听器接口

由于事件源 Source 任何接口都不需要实现,所以 Java 没有给出相应的定义。 简单使用 Java 原生实现事件模型的例子:

public class EventTest {

public static void main(String[] args) {

EventSource eventSource = new EventSource();

TestEventListener listener = new TestEventListener();

eventSource.addListener(listener);

eventSource.publishEvent(new TestEvent(eventSource, "一个事件"));

}

}

/**

* 事件对象

*/

class TestEvent extends EventObject {

private String msg;

/**

* Constructs a prototypical Event.

*

* @param source The object on which the Event initially occurred.

* @param msg 附加消息

* @throws IllegalArgumentException if source is null.

*/

public TestEvent(Object source, String msg) {

super(source);

this.msg = msg;

}

public String getMsg() {

return msg;

}

}

/**

* 事件监听者,按照 Java 规范应实现 EventListener 接口

*/

class TestEventListener implements EventListener {

public void handleEvent (TestEvent event) {

System.out.println("TestEvent, msg is:" + event.getMsg());

}

}

/**

* 事件源

*/

class EventSource {

private Set listenerSet = new HashSet<>();

public void addListener(EventListener listener) {

listenerSet.add(listener);

}

public void publishEvent(TestEvent event) {

for (EventListener eventListener : listenerSet) {

((TestEventListener) eventListener).handleEvent(event);

}

}

}

上述代码示例是在 Java 实现事件发布和监控的过程。

Spring 使用框架的事件和在 Java 事实上,使用时间机制并没有什么不同 由事件源、事件对象和事件监听者组成。与 Java 原生提供的事件机制不同,Spring 中提供了 ApplicationEvent 作为基类,开发者可以在此基础上定义自己的自定义事件。 在 Spring 中,继承自 ApplicationEvent 事件对象的监听者可以由 Spring 管理容器并在发布时通过 ApplicationEventPublisher 进行发布。这避免了我们自己的注册和通知过程,避免了许多复杂的过程,使我们更加专注于业务本身。

在我看来,事件驱动机制实际上是一个反向推动过程。一般来说,事件发生在执行函数操作后,但事件驱动机制是根据事件发生反向启动所需的操作。当然,这只是我个人的理解。毕竟,有1000名读者和1000名哈姆雷特。我们可以根据自己的需要和特点更好地理解事件驱动机制。