java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springBoot观察者模式

springBoot中观察者模式详解

作者:Dubbo-罗

观察者模式增强应用的灵活性和可扩展性,利用java.util.Observable和java.util.Observer实现,Spring通过ApplicationEvent类和事件广播器管理事件,支持应用上下文和请求相关的事件处理,实现松耦合和动态通知,优点包括松耦合、动态通知、易于扩展

观察者设计模式

特点:

观察者implements Observer 重写update方法:

优点松耦合:

有点通知不错过:

Java实现:

java中有观察者模式使用的API

开关的重要性:

Spring中的Events

事件通过org.springframework.context.ApplicationEvent实例来表示。

这个抽象类继承扩展了java.util.EventObject,可以使用EventObject中的getSource方法,我们可以很容易地获得所发生的给定事件的对象。

这里,事件存在两种类型,其实EventObject就是事件的接口.事件有非常多,都可以实现这个接口,那么这个事件就有自己的东西.

1.与应用程序上下文相关联

所有这种类型的事件都继承自org.springframework.context.event.ApplicationContextEvent类。它们应用于由org.springframework.context.ApplicationContext引发的事件(其构造函数传入的是ApplicationContext类型的参数)。

这样,我们就可以直接通过应用程序上下文的生命周期来得到所发生的事件:ContextStartedEvent在上下文启动时被启动,当它停止时启动ContextStoppedEvent,当上下文被刷新时产生ContextRefreshedEvent,最后在上下文关闭时产生ContextClosedEvent

2.与request 请求相关联

org.springframework.web.context.support.RequestHandledEvent实例来表示,当在ApplicationContext中处理请求时,它们被引发。

Spring如何将事件分配给专门的监听器?

这个过程由事件广播器来实现,由org.springframework.context.event.ApplicationEventMulticaster接口的实现表示。

此接口定义了3种方法

  1. addApplicationListener() 添加新的监听器**:定义了两种方法来添加新的监听器:addApplicationListener(ApplicationListener<?> listener)addApplicationListenerBean(String listenerBeanName)。当监听器对象已知时,可以应用第一个。如果使用第二个,我们需要将bean name 得到listener对象(依赖查找DL),然后再将其添加到listener列表中
  2. removeApplicationListenerBean(String listenerBeanName) 删除监听器:添加方法一样,我们可以通过传递对象来删除一个监听器(**removeApplicationListener(ApplicationListener<?> listener)**或通过传递bean名称。第三种方法,**removeAllListeners()**用来删除所有已注册的监听器
  3. **multicastEvent(ApplicationEvent event)**将事件发送到已注册的监听器

在JDK当中也封装了事件,但是用到了swing的编程中去了.也就是java中的事件:EventListener,只不过这个接口是用到了swing编程中去了.

EventObject也就是Java当中的事件.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文