首页 > 文章列表 > SpringBoot监听器模式实例分析

SpringBoot监听器模式实例分析

springboot
106 2023-05-22

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这一事件广播器,继承关系如图所示: