简介
在Spring构建的应用程序中,适当使用spring事件发布与监听的机制可以使我们的代码灵活度高,降低耦合性。Spring 提供了完整的事件发布与监听模型。
sprjng借助于 org.springframewofk.context.event.ApplicationEvent抽象类及其子类实现事件的发布,与此同时,借助于 org.springframework.context.ApplicationListener接口及其实现者实现事件的监听,这两者构成了观察者 ( observer) 模式。
ApplicationContext 接口没有重写 ApplicationEventPublisher 的 publishEvent 方法是为了保持接口的单一职责原则和灵活性,让具体的 ApplicationContext 实现类来决定事件发布的具体逻辑。
监听器模式
监听器模式包含了一个监听者listener和与之对应的事件Event,还有一个事件发布者EventPublish,过程就是EventPublish发布了一个事件Event,被监听者Listener捕捉到,然后执行事件相应的方法。
观察者模式
观察者是一对多的模式,一个被观察者Observable和多个观察者Observer,被观察者中存储了所有的观察者对象,当被观察者接收到一个外界的消息,就会遍历广播推送消息给所有的观察者。
Spring事件核心接口和类
1.事件 :ApplicationEvent
该抽象类继承了EventObject,EventObject是JDK中的类,建议所有的事件都应该继承自EventObject.
2.事件监听器 :ApplicationListener
ApplicationListener是一个接口,该接口继承EventListener接口。EventListener接口是JDK中的,
建议所有的事件监听器都应该继承EventListener。监听器是用于接收事件,并触发事件的操作,
这样说起来可能有点费解,简单的说就是,Listener是监听ApplicationContext.publishEvent方法的调用,
一旦调用publishEvent,就会执行ApplicationListener中的onApplication方法。
3.事件发布器 :ApplicationEventPublisher
ApplicationContext继承了这个接口,在ApplicationContext的抽象实现类AbstractApplicationContext中做了实现,可以通过publishEvent方法发布事件。
4.事件源 :ApplicationContext
ApplicationContext是Spring核心的容器,在事件监听中ApplicationContext可以作为事件的发布者,也就是事件源。因为ApplicationContext继承自ApplicationEventPublisher,在ApplicationEventPublisher中定义了事件方法publishEvent(Object object)方法。
5.事件广播器 :ApplicationEventMulticaster
ApplicationEventMulticaster用于事件监听器的注册和事件的广播。监听器的注册就是通过它来实现的,它的作用是把ApplicationContext发布的Event广播给它的监听器列表。