ホームページ  >  記事  >  Java  >  SpringBoot リスナー パターンの例の分析

SpringBoot リスナー パターンの例の分析

王林
王林転載
2023-05-12 21:40:181064ブラウズ

1. イベント ApplicationEvent

ApplicationEvent は抽象クラスであり、その継承関係は図に示すように拡張されます。 SpringBoot によって定義されるイベント タイプが非常に豊富であることがわかりました。

2. リスナー ApplicationListenerSpringBoot リスナー パターンの例の分析

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&#39;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 リスナー パターンの例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。