Spring cloud

Spring之事件机制模型

2018-12-12  本文已影响31人  Mr_1214

概述

spring中的事件驱动模型也叫作发布订阅模式,是观察者模式的一个典型的应用

spring事件模型提供如下的类的概念:

  1. ApplicationListener: ApplicationListener继承自jdk的EventListener,所有的监听器都要实现这个接口,这个接口只有一个onApplicationEvent()方法,该方法接受一个ApplicationEvent或其子类对象作为参数,在方法体中,可以通过不同对Event类的判断来进行相应的处理.当事件触发时所有的监听器都会收到消息。
  2. ApplicationEvent: ApplicationEvent继承自jdk的EventObject,所有的事件都需要继承ApplicationEvent,并且通过source得到事件源.该类的实现类ApplicationContextEvent表示ApplicaitonContext的容器事件
  3. ApplicationEventPublisher: 事件的发布者,封装了事件发布功能方法接口,是Applicationcontext接口的超类
  4. ApplicationEventMulticaster: 属于事件广播器,它的作用是把Applicationcontext发布的Event广播给所有的监听器

事件机制工作流程图

event1.png

ApplicationListener

@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {

    /**
     * 当前事件event发布时触发此方法,此方法用于监听事件的发布
     */
    void onApplicationEvent(E event);

}

ApplicationListener 事件监听器的超级接口,所有事件监听器继承实现与此类

ApplicationEvent

public abstract class ApplicationEvent extends EventObject {

    /** 事件发生的时间 */
    private final long timestamp;

    public ApplicationEvent(Object source) {
        super(source);
        this.timestamp = System.currentTimeMillis();
    }

    public final long getTimestamp() {
        return this.timestamp;
    }

}

ApplicationEvent 事件的超类,所有事件基于此类实现

ApplicationEventPublisher

@FunctionalInterface
public interface ApplicationEventPublisher {

    /**
     * 发布事件
     */
    default void publishEvent(ApplicationEvent event) {
        publishEvent((Object) event);
    }

    /**
     * 发布事件
     */
    void publishEvent(Object event);

}

ApplicationEventPublisher 事件发布功能接口,用于提供发布事件的能力接口,为Applicationcontext接口的超类

ApplicationEventMulticaster

public interface ApplicationEventMulticaster {
    /**
     * 添加给定监听器集合
     */
    void addApplicationListener(ApplicationListener<?> listener);

    /**
     * 添加给定名称的事件监听器
     */
    void addApplicationListenerBean(String listenerBeanName);

    /**
     * 移除给定事件监听器集合
     */
    void removeApplicationListener(ApplicationListener<?> listener);

    /**
     * 移除名称为listenerBeanName的事件监听器
     */
    void removeApplicationListenerBean(String listenerBeanName);

    /**
     * 移除所有事件监听器
     */
    void removeAllListeners();

    /**
     * 事件发布后通知监听器执行onApplicationEvent方法
     */
    void multicastEvent(ApplicationEvent event);

    /**
     * 事件发布后通知监听器执行onApplicationEvent方法
     */
    void multicastEvent(ApplicationEvent event, @Nullable ResolvableType eventType);

}

ApplicationEventMulticaster 持有所有监听器对象,并可以动态增删事件监听器,同时具有在事件发布后广播通知事件监听器。

上一篇下一篇

猜你喜欢

热点阅读