美文网首页
spring监听机制 观察者模式 Observer和Observ

spring监听机制 观察者模式 Observer和Observ

作者: jiezzy | 来源:发表于2020-08-21 14:20 被阅读0次

spring观察者模式

spring监听机制——观察者模式的应用

code

https://blog.csdn.net/playboyb/article/details/5481325

AbstractApplicationContext.java

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver {

    private ApplicationContext parent;

    public void publishEvent(ApplicationEvent event) {
        Assert.notNull(event, "Event must not be null");
        if (this.logger.isTraceEnabled()) {
            this.logger.trace("Publishing event in " + this.getDisplayName() + ": " + event);
        }

        this.getApplicationEventMulticaster().multicastEvent(event);
        if (this.parent != null) {
            this.parent.publishEvent(event);
        }

    }

SimpleApplicationEventMulticaster

    public void multicastEvent(final ApplicationEvent event) {
        Iterator var2 = this.getApplicationListeners(event).iterator();

        while(var2.hasNext()) {
            final ApplicationListener<?> listener = (ApplicationListener)var2.next();
            Executor executor = this.getTaskExecutor();
            if (executor != null) {
                executor.execute(new Runnable() {
                    public void run() {
                        SimpleApplicationEventMulticaster.this.invokeListener(listener, event);
                    }
                });
            } else {
                this.invokeListener(listener, event);
            }
        }

    }

    protected void invokeListener(ApplicationListener listener, ApplicationEvent event) {
        ErrorHandler errorHandler = this.getErrorHandler();
        if (errorHandler != null) {
            try {
                listener.onApplicationEvent(event);
            } catch (Throwable var5) {
                errorHandler.handleError(var5);
            }
        } else {
            listener.onApplicationEvent(event);
        }

    } 

Observer和Observable在Java 9标记为废弃。

废弃原因

Observer和Observable有几个原因:

1、不能序列化

Observable没有实现Serializable接口,它的内部成员变量都是私有的,子类不能通过继承它来对Observable的成员变量处理。所以子类也不能序列化。

参考:Why is java.util.Observable class not serializable.

2、不是线程安全

在 java.util.Observable文档里没有强制要求Observable是线程安全的,它允许子类覆盖重写Observable的方法,事件通知无序以及事件通知发生在不同的线程里,这些都是会影响线程安全的问题。

参考:Documentation of java.util.Observable

3、支持事件模型的功能简单

支持事件模型的功能很简单,例如,只是支持事情发生变化的概念,但是不能提供更多哪些内容发生了改变。

参考:deprecate Observer and Observable

解决方案

可以使用java.beans 里的PropertyChangeEventPropertyChangeListener 来代替目前Observer和Observable的功能。

相关文章

  • spring监听机制 观察者模式 Observer和Observ

    spring观察者模式 spring监听机制——观察者模式的应用 code https://blog.csdn.n...

  • Observable 和 Observer 详解

    Observable 和Observer 的使用被称为观察者模式,Observable 担任被观察者,Observ...

  • 06、SpringBoot的ApplicationEvent和L

    ApplicationEvent和Listener是Spring提供的一个事件发布与监听机制,底层采用的观察者模式...

  • SpringBoot的ApplicationEvent和List

    ApplicationEvent和Listener是Spring提供的一个事件发布与监听机制,底层采用的观察者模式...

  • KVO面试题

    概念 KVO(Key-Value-Observer)也就是观察者模式,是苹果提供的一套事件通知机制。允许对象监听另...

  • Spring 事件机制概述

    Spring 事件机制是观察者模式的典型应用,本文将由浅入深从观察者模式、java事件机制、Spring事件机制三...

  • 观察者模式

    一、观察者模式(发布-订阅模式)Observer 观察者模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听...

  • Android观察者模式的理解

    观察者模式理解 观察者模式 Observer 观察者模式定义了一个一对多的依赖关系,让多个观察者对象同时监听一个主...

  • Laravel5.8 模型事件与 Observer

    Observer 观察者模式创建步骤 观察者监听多个事件观察者 注册观察者注册观察者 观察者中事件的发生顺序 la...

  • 观察者模式&发布订阅

    观察者模式 定义 观察者模式(Observer):又被称为发布-订阅模式或消息机制,定义了一种依赖关系,解决了主体...

网友评论

      本文标题:spring监听机制 观察者模式 Observer和Observ

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