美文网首页
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

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