イベントジェネリック型に基づいてイベント処理を構築したいと考えています。
イベント クラス:
public class PushNotificationStoreEvent<T extends Push> extends ApplicationEvent {
private static final long serialVersionUID = -3791059956099310853L;
public T push;
public PushNotificationStoreEvent(Object source, T push) {
super(source);
this.push = push;
}
}
Push
クラスのマーカー インターフェイスは次のPushNotificationNew
とおりですPushNotificationFail
。
リスナー:
@Async
@EventListener
public void storeNewPush(PushNotificationStoreEvent<PushNotificationNew> event) {
pushNewRepoService.save(event.push);
}
@Async
@EventListener
public void storeFailPush(PushNotificationStoreEvent<PushNotificationFail> event) {
pushFailRepoService.save(event.push);
}
問題:リスナーのPushNotificationStoreEvent<PushNotificationNew>
との区別がありません。PushNotificationStoreEvent<PushNotificationFail>
つまり、すべてのイベントPushNotificationStoreEvent
がすべてのリスナーによって処理されます。
ケースごとに個別のイベント クラスを作成するか、1 つのリスナーを使用instanceof
しevent.push
て適切なアクションを選択することで、これを解決できます。多分あなたはより良い解決策を知っていますか?