美文网首页Spring cloud
Spring之事件机制模型

Spring之事件机制模型

作者: Mr_1214 | 来源:发表于2018-12-12 08:07 被阅读31次

    概述

    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 持有所有监听器对象,并可以动态增删事件监听器,同时具有在事件发布后广播通知事件监听器。

    相关文章

      网友评论

        本文标题:Spring之事件机制模型

        本文链接:https://www.haomeiwen.com/subject/kaeehqtx.html