网站建设vipjiuselu,枣庄市建设项目环评备案网站,网站建设服务英文,架设网站的目的技术组件与设计模式 观察者模式与发布订阅模式的异同 观察者模式它是用于建立一种对象与对象之间的依赖关系,一个对象发生改变时 将自动通知其他对象,其他对象将相应的作出反应. 在观察者模式中发生改变的对象称为观察目标,而被通知的对象称为观察者, 一个观察目标可以应对多个… 技术组件与设计模式 观察者模式与发布订阅模式的异同 观察者模式它是用于建立一种对象与对象之间的依赖关系,一个对象发生改变时 将自动通知其他对象,其他对象将相应的作出反应. 在观察者模式中发生改变的对象称为观察目标,而被通知的对象称为观察者, 一个观察目标可以应对多个观察者,而且这些观察者之间可以没有任何相互 联系,可以根据需要增加和删除观察者,使得系统更易于扩展. 观察者模式的别名有发布-订阅(Publish/Subscribe)模式, 我们来看一下观察者模 式与发布订阅模式结构上的区别 在设计模式结构上发布订阅模式继承自观察者模式是观察者模式的一种 实现的变体。 在设计模式意图上两者关注点不同一个关心数据源一个关心的是事件消息 观察者模式里只有两个角色 —— 观察者 被观察者; 而发布订阅模式 里却不仅仅只有发布者和订阅者两个角色还有一个管理并执行消息队 列的 “经纪人Broker”观察者和被观察者是松耦合的关系;发布者和订阅者则完全不存在耦合 观察者模式 数据源直接通知订阅者发生改变。 发布订阅模式 数据源告诉第三方事件通道发生了改变第三方再通知 订阅者发生了改变。 Spring中的观察者模式 Spring 基于观察者模式实现了自身的事件机制也就是事件驱动模型事件驱动模型通常也被理解成观察者或者发布/ 订阅模型。 spring 事件模型提供如下几个角色 ApplicationEvent ApplicationListener ApplicationEventPublisher ApplicationEventMulticaster 事件ApplicationEvent 是所有事件对象的父类。ApplicationEvent 继承自 jdk 的 EventObject, 所 有的事件都需要继承 ApplicationEvent, 并且通过 source 得到事件源。 public abstract class ApplicationEvent extends EventObject
{
private static final long serialVersionUID
7099057708183571937L;
private final long timestamp
System.currentTimeMillis();
public ApplicationEvent(Object source) {
super(source);
}
public final long getTimestamp() {
return this.timestamp;
}
} Spring 也为我们提供了很多内置事件: ContextRefreshEvent 当 ApplicationContext 容器初始化完成或者被刷新的时候就会发布该事件。 ContextStartedEvent当ApplicationContext 启动的时候发布事件 . ContextStoppedEvent当 ApplicationContext 容器停止的时候发布事件.RequestHandledEvent只能用于 DispatcherServlet 的 web 应用 Spring处理用户请求结束后系统会触发该事件。 事件监听ApplicationListener ApplicationListener( 应用程序事件监听器 ) 继承自 jdk 的 EventListener, 所有 的监听器都要实现这个接口 , 这个接口只有一个 onApplicationEvent() 方法 , 该 方法接受一个 ApplicationEvent 或其子类对象作为参数 在方法体中 , 可以通过不同对 Event 类的判断来进行相应的处理 . 当事件触发时 所有的监听器都会收到消息 , 如果你需要对监听器的接收顺序有要求 , 可是实 现该接口的一个实现 SmartApplicationListener, 通过这个接口可以指定监听 器接收事件的顺序 . FunctionalInterface
public interface ApplicationListenerE extends
ApplicationEvent extends EventListener {
void onApplicationEvent(E var1);
} 实现了 ApplicationListener 接口之后需要实现方法 onApplicationEvent()在容器将所有的 Bean 都初始化完成之后就会执行 该方法。 事件源ApplicationEventPublisher 事件的发布者封装了事件发布功能方法接口是 Applicationcontext接口的超类, 事件机制的实现需要三个部分,事件源,事件,事件监听器,在上面介绍的 ApplicationEvent就相当于事件,ApplicationListener相当于事件监听 器,这里的事件源说的就是ApplicationEventPublisher. public interface ApplicationEventPublisher {
default void publishEvent(ApplicationEvent event) {
this.publishEvent((Object)event);
}void publishEvent(Object var1);
} 事件管理ApplicationEventMulticaste 用于事件监听器的注册和事件的广播。监听器的注册就是通过它来实现的 它的作用是把 Applicationcontext 发布的 Event 广播给它的监听器列表。 事件机制工作流程 推荐阅读 领域分解识别服务 技术总体方案设计思路