SpringBoot的监听器模式分析-1

监听器模式,大家应该并不陌生,主要的组成要素包括了事件、监听器以及广播器;当事件发生时,广播器负责将事件传递给所有已知的监听器,而监听器会对自己感兴趣的事件进行处理。

注:图片来源于网络

SpringBoot作为业内公认的优秀开源框架,它的监听器是如何实现呢?在这里首先对一些基础组件进行分析;

1、事件:ApplicationEvent

ApplicationEvent是一个抽象类,idea上展开其继承关系如图:

可见SpringBoot所定义的事件类型是极为丰富的。

2、监听器:ApplicationListener

ApplicationListener是一个接口,我们也可以通过实现这个接口来定义自己的监听器,可以通过与事件初始化器方式相似的方式进行加载。

@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {

	/**
	 * Handle an application event.
	 * @param event the event to respond to
	 */
	void onApplicationEvent(E event);

}

我们可以看到代码中它接受一个上文中提到的事件泛型,这代表了此监听器关注的事件;

还有一种实现监听器的方式,即实现SmartApplicationListener接口,SmartApplicationListener继承了ApplicationListener接口,通过这种方式实现监听器,可以同时注册多个感兴趣的事件,只需实现接口的supportsEventType方法即可;

public interface SmartApplicationListener extends ApplicationListener<ApplicationEvent>, Ordered {

	/**
	 * Determine whether this listener actually supports the given event type.
	 * @param eventType the event type (never {@code null})
	 */
	boolean supportsEventType(Class<? extends ApplicationEvent> eventType);

	/**
	 * Determine whether this listener actually supports the given source type.
	 * <p>The default implementation always returns {@code true}.
	 * @param sourceType the source type, or {@code null} if no source
	 */
	default boolean supportsSourceType(@Nullable Class<?> sourceType) {
		return true;
	}

	/**
	 * Determine this listener's order in a set of listeners for the same event.
	 * <p>The default implementation returns {@link #LOWEST_PRECEDENCE}.
	 */
	@Override
	default int getOrder() {
		return LOWEST_PRECEDENCE;
	}

}

3、事件广播器ApplicationEventMulticaster

ApplicationEventMulticaster是一个接口,定义了添加监听器、删除监听器、传播事件等方法;

SpringBoot为我们实现了SimpleApplicationEventMulticaster这一事件广播器,继承关系如图所示:

SpringBoot如何传播事件,有时间在下一篇博文进行整理,本文有哪些不对之处,也感谢大家的指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值