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