Spring/SpringBoot面向事件驱动编程
- 事件监听机制可以理解为是一种观察者模式,有数据发布者(事件源)和数据接受者(监听器);
- 在Java中,事件对象都是继承java.util.EventObject对象,事件监听器都是java.util.EventListener实例;
- EventObject对象不提供默认构造器,需要外部传递source参数,即用于记录并跟踪事件的来源;
Spring/Spring Boot在面向事件驱动编程方面提供了以下内容:
- 事件(Events):Spring提供了一个基于观察者模式的事件模型。通过定义和发布事件,可以将不同组件之间解耦,使其能够以异步方式进行通信。
- 事件监听器(Event Listeners):通过实现ApplicationListener接口或使用@EventListener注解,可以创建事件监听器。这些监听器用于接收和处理发布的事件,并根据需要执行相应的操作。
- 事件发布器(Event Publisher):Spring框架提供了ApplicationEventPublisher接口,用于发布事件。可以通过调用publishEvent()方法来发布自定义的事件,从而通知所有注册的监听器。
- 领域事件(Domain Events):在面向领域驱动设计(Domain-Driven Design)的应用程序中,领域事件用于表示系统中重要的业务操作或状态变化。Spring框架提供了支持,允许开发人员将领域事件与应用程序的其他部分集成起来。
- 异步事件处理(Asynchronous Event Handling):Spring支持将事件处理设置为异步执行。可以使用@Async注解将事件处理方法标记为异步方法,从而使事件的处理在独立的线程中执行。
- 条件事件(Conditional Events):使用@Conditional注解,可以根据满足特定条件才触发事件。这样可以根据应用程序的状态或配置选择性地发布事件,从而更加灵活地控制事件的触发。
通过这些功能,Spring/Spring Boot的面向事件驱动编程能够实现松耦合、可扩展和易于维护的应用程序架构。开发人员可以使用事件和监听器来处理应用程序中的各种场景,例如状态变化、业务流程、异步消息处理等,从而提高系统的响应性和可测试性。
观察者模式
观察者模式的定义:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。
观察者模式角色
- Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。
- ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。
- Observer:抽象观察者,是观察者者的抽象类,它定义了一个更新接口,使得在得到主题更改通知时更新自己。
- ConcrereObserver:具体观察者,实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态。
Spring事件
事件机制实现方式 实现Spring事件机制主要有4个类:
- ApplicationEvent:事件,每个实现类表示一类事件,可携带数据。
- ApplicationListener:事件监听器,用于接收事件处理时间。
- ApplicationEventMulticaster:事件管理者,用于事件监听器的注册和事件的广播。
- ApplicationEventPublisher:事件发布者,委托ApplicationEventMulticaster完成事件发布。
EventObject 应用事件,职责为定义业务
只需要实现ApplicationEvent 抽象类定义有参构造函数即可,source表示事件源,( 可按照自己的需求制定)
EventObject对象不提供默认构造器,需要外部传递source参数,即用于记录并跟踪事件的来源; Spring事件对象为ApplicationEvent,继承EventObject,源码如下:
java
复制代码
public abstract class ApplicationEvent extends EventObject { /** * Create a new ApplicationEvent. * @param source the object on which the event initially occurred (never {@code null}) */ public ApplicationEvent(Object source) { super(source); this.timestamp = System.currentTimeMillis(); } }
ApplicationListener
事件监听器,职责为处理事件广播器发布的事件
Spring事件监听器为ApplicationListener,继承EventListener, 源码如下:
java
复制代码
public interface ApplicationListener<E extends ApplicationEvent> extends Even