从实现角度分析,Spring事件监听机制属于事件监听器模式,可以使视为观察者模式的扩展:
- java.util.Observable 数据发布者
- java.util.Observer 数据接收者
- 任意Object对象 数据
对比Spring的事件监听器模式:
- ApplicationEventMulticaster 事件的发布者,spring中默认事件发布者(SimpleApplicationEventMulticaster) ,继承实现关系:ApplicationEventMulticaster -> AbstractApplicationEventMulticaster ->SimpleApplicationEventMulticaster
- ApplicationListener 事件监听器,继承jdk中EventListener
- ApplicationEvent 继承jdk中EventObject
源码解读
// 1.事件
public abstract class ApplicationEvent extends EventObject {
private final long timestamp;
public ApplicationEvent(Object source) {
super(source);
this.timestamp = System.currentTimeMillis();
}
public final long getTimestamp() {
return this.timestamp;
}
}
// 2.事件监听器
@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
/**
* Handle an application event.
* @param event the event to respond to
*/
void onApplicationEvent(E event);
}
// 3.事件发布器
public interface ApplicationEventMulticaster {
// 添加事件监听器
void addApplicationListener(ApplicationListener<?> listener);
// 添加注册为bean的事件监听器
void addApplicationListenerBean(String listenerBeanName);
//删除事件监听器
void removeApplicationListener(ApplicationListener<?> listener);
// 删除事件监听器
void removeApplicationListenerBean(String listenerBeanName);
// 删除所有事件监听
void removeAllListeners();
// 事件广播
void multicastEvent(ApplicationEvent event);
// 发布指定类型事件
void multicastEvent(ApplicationEvent event, @Nullable ResolvableType eventType);
}