Аннотированный метод @EventListener с ненулевым возвращаемым значением не вызывает новое событие - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть следующий метод, в котором я пытаюсь вернуть тип без пустот и надеюсь обработать опубликованное событие тем же методом (рекурсивно).:

@EventListener
@Async

public GenericSpringEvent<?> onGenericEvent(GenericSpringEvent<?> event) throws InterruptedException {

Thread.sleep(5000);
System.out.println("Received spring generic event - " + event.getWhat() + ", thread id " + Thread.currentThread().getId());
return new GenericSpringEvent<String>(String.valueOf(System.currentTimeMillis()), true);
}

Метод изначально вызывается следующим вызовом в моем приложении:

GenericSpringEvent<String> genericSpringEvent = new GenericSpringEvent<>("GENERIC - STRING - TRUE", true);
applicationEventPublisher.publishEvent(genericSpringEvent);

слушатель вызывается только один раз. Я ожидал бы бесконечный цикл вместо этого. Может кто-нибудь объяснить мне, как этого добиться. Это не должен быть тот же самый метод слушателя, хотя я хотел бы понять, как работает эта функция, не возвращающая пустоты. Thanx!

1 Ответ

1 голос
/ 01 апреля 2019

Вы публикуете GenericSpringEvent только один раз!Это причина.Чтобы опубликовать его снова, я вижу два варианта сделать это:

1 - вы должны сделать то же самое: applicationEventPublisher.publishEvent(genericSpringEvent); в вашем методе onGenericEvent

2 - написать какой-то аспект вокруг вашегоМетод onGenericEvent, так что после возврата вы делаете applicationEventPublisher.publishEvent(returnedGenericSpringEvent);

Возврат события не делает его опубликованным, метод, аннотированный @EventListener, аналогичен любому другому методу, поэтому он может иметь возврат не void.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...