Каковы преимущества использования публикации событий приложения Spring? - PullRequest
8 голосов
/ 09 марта 2011

Я работаю над веб-приложением, использующим некоторые публикации Spring Application Event, и мне было интересно, каковы его преимущества? Почему бы просто не создать вызов службы для всего, что происходит в обработчике событий onApplicationEvent, а затем вызвать эту службу вместо публикации события?

Ответы [ 3 ]

14 голосов
/ 11 августа 2011

Одним из преимуществ использования публикации событий Spring (шаблон наблюдателя - http://en.wikipedia.org/wiki/Observer_pattern) является то, что компоненты слабо связаны - прямой связи между издателем и подписчиком нет. Конечно, они оба зависят от Spring Event API, но не друг на друга. Это позволяет расширять приложение путем добавления / удаления подписчиков, не затрагивая других подписчиков (при условии, что ваши подписчики не зависят друг от друга).

С другой стороны, как вы, возможно, обнаружили, это может сделать отладку более сложной, поскольку она вводит уровень косвенности между источником события и общим результатом.

Да, обычно вы можете заменить событие прямым вызовом API. Использование событий подходит, когда:

  • вам может потребоваться в будущем предпринять более одного независимого действия при наступлении события
  • обработка должна быть передана другому потоку для предотвращения блокировки, например, отправка электронного письма (с использованием пользовательского ApplicationEventMulticaster).
  • как система обрабатывает событие, например, AuthorizationFailureEvent, не зависит от исхода слушателей.
  • Вы пишете библиотеку, например, Spring Security и прямые вызовы API не возможны.
2 голосов
/ 09 марта 2011

В ответ на часть вопроса, которая спрашивает, почему бы просто не создать сервисный вызов; потому что кто-то другой уже написал код, задокументировал его и протестировал.

0 голосов
/ 29 апреля 2018

Примеры использования прослушивателя на основе событий -

  1. TDD становится очень удобным (что, в свою очередь, устраняет ошибки)

  2. Лучше всего подходит для шаблона с одной ответственностью (чистый код) (ссылка для справки - https://www.youtube.com/watch?v=h8TWQM6fKNQ)

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