深入理解 Spring 中的事件机制

什么是 Spring 的事件机制?

在讲 Spring 事件之前,大家可以简单回顾一下设计模式中的观察者模式,这边只简单看一下观察者模式的流程如下:

image

这边有两个核心的角色:

  • Subject (目标):目标也称之为被观察者也就是被观察的对象,当然再实际的工程实现上可能会存在很多具体的目标。
  • Observer(观察者):观察者就是对当具体的目标变更的时候做出对应的反应。

ok,简单回顾完观察者模式让我们回到什么是 Spring 的事件机制,简单地说:Spring 的事件机制就是具体的观察者模式的实现。

Spring 中事件机制中各角色:

  • 事件 ApplicationEvent 是所有事件对象的父类,也就是说当某个业务发生改变 Spring 可以发出一个事件出来(当然这边可能是具体的某一个事件,Spring 中常用的事件请看第二节介绍)。
  • 事件监听 ApplicationListener,也就是观察者,继承自 JDK 的 EventListener,该类中只有一个方法 onApplicationEvent。当监听的事件发生后该方法会被执行。
  • 事件源 ApplicationContextApplicationContext 是 Spring 中的核心容器,在事件监听中 ApplicationContext 可以作为事件的发布者,也就是事件源
  • 事件管理 ApplicationEventMulticaster,用于事件监听器的注册和事件的广播。监听器的注册就是通过它来实现的,它的作用是把 Applicationcontext 发布的 Event 广播给它的监听器列表。

Spring 中具体有哪些地方使用了事件机制?

如下图所示是 Spring 中所有的事件继承关系类图:

在这里插入图片描述

其中常用的事件有:

  • ContextRefreshedEvent:初始化或刷新时触发事件
  • ContextStartedEvent:启动容器触发事件
  • ContextStoppedEvent:容器停止触发事件
  • ContextClosedEvent:容器关闭触发事件

这边我们以 ContextRefreshedEvent 为例来介绍一下 Spring 事件发布的流程。

事件派发

从容器启动调用 refresh() 方法进入到 finishRefresh() 方法如下:

你可能感兴趣的:(深入理解 Spring 中的事件机制)