Spring Framework. Event Listener

  Рет қаралды 1,528

PavelVil

PavelVil

Күн бұрын

Пікірлер: 19
@caffeinejavacode1475
@caffeinejavacode1475 Ай бұрын
крутое видео, практика очень интересная, много узнал. интересно как выузнали про ApplicationEventMulticaster?
@PavelVil
@PavelVil Ай бұрын
Спасибо! Довольно часто при обработке событий хочется чтобы они обрабатывались асинхронно, поэтому я использую ApplicationEventMulticaster довольно давно и не припомню как я про него узнал, но скорее всего это была дока или какая-то статья=)
@obusis
@obusis 10 ай бұрын
Последняя часть с асинхронным обработчиком уж больно резво прошла :) Не стесняйтесь чуть притормаживать и делать разъяснения 🙏
@PavelVil
@PavelVil 10 ай бұрын
Что было непонятно? Могу попытаться ответить в комментариях=)
@ANDREYQIWS
@ANDREYQIWS 8 ай бұрын
Супер круто, с первого раза тяжело понять, но ничего, будем разбиратся
@ZamalSpace
@ZamalSpace 10 ай бұрын
Спасибо за Event Listener, как раз ждал, за примеры, особенно за асинхронную обработку. Ну как-то все так быстро )) С асинхронной обработкой как-то пока тяжело усвоилось. Получается как только мы внедрил бин ApplicationEventMulticaster, то обработка собитий происходит асинхронно?
@PavelVil
@PavelVil 10 ай бұрын
Я решил не удлинять видео, но, действительно, есть пара слов, которые стоило бы добавить. 1) На самом деле, с помощью EventListener Spring просто реализует паттерн Observer. Вот, я написал реализацию на чистой Java, без использования Spring - gist.github.com/PavelVil/560c1b9813c1bceee3b374b2e1c39035. 2) Да, если мы добавляем ApplicationEventMulticaster и выставляем ему асинхронный экзекьютор, то все наши события выполняются асинхронно. Если не выставить асинхронный экзекьютор, то будет использоваться org.springframework.core.task.SyncTaskExecutor, который выполняет все события синхронно. 3) Также у org.springframework.context.ApplicationListener, помимо метода onEvent, есть метод boolean supportsAsyncExecution(). По умолчанию он возвращает true. Если изменить на false, то обработка всегда выполняется внутри исходного потока, опубликовавшего событие.
@ZamalSpace
@ZamalSpace 10 ай бұрын
@@PavelVil Спасибо за развернутый ответ
@aleksandr_4638
@aleksandr_4638 10 ай бұрын
отлично рассказал
@alexandr6055
@alexandr6055 9 ай бұрын
скажите в чем основная фишка использования EventListener? Выглядит так что некоторые фишки я могу решить просто заинжектив бин в класс, а другие решаться с помощью кафки.
@PavelVil
@PavelVil 9 ай бұрын
EventListener работает в рамках одного приложения, в то время как Kafka предназначен для стриминга событий и обмена данными между различными приложениями. Да, использование EventListener можно заменить обычным внедрением зависимостей. Однако с помощью EventListener можно отделить логику обработки некоего события от основной бизнес-логики и гибко настроить асинхронную обработку событий. Если в приложении много событий, то все их обработчики можно держать в одном пакете, разделить их там и управлять ими.
@obusis
@obusis 10 ай бұрын
Правильно ли использовать Event listener для передачи объектов между компонентами приложения для достижения низкого coupling?
@PavelVil
@PavelVil 10 ай бұрын
Да, использование слушателей может снизить сцепление между компонентами и в целом способствует построению более гибкой архитектуры за счет изолированности издателя и подписчика событий. Однако в такой системе все равно присутствует непрямая связь между компонентами, что может усложнить понимание того, как выполняется код. Если стоит выбор между внедрением бина и передачей через события, лучше внедрять бин.
@obusis
@obusis 10 ай бұрын
А если внедрять, то только через конструктор же (через поле не по фен-шую, так как сложно тестировать, через сеттер тоже иммутабельность нарушается)... 🤷
@obusis
@obusis 10 ай бұрын
Насколько неправильно 😅 в спринг часть объектов локально создавать в методах через new?
@PavelVil
@PavelVil 10 ай бұрын
Можно использовать внедрение как через поле, так и через сеттеры. Однако внедрение через конструктор считается наиболее предпочтительным. Фактически, выбор метода зависит от конкретной ситуации.
@PavelVil
@PavelVil 10 ай бұрын
Создание объектов через оператор new противоречит основным концепциям Spring. Фреймворк фокусируется на управлении объектами и их зависимостями, предоставляя контейнер для управления жизненным циклом и внедрением зависимостей. Использование new фактически выходит за пределы контекста Spring. Однако в некоторых ситуациях, например, при создании вспомогательных объектов, которые не являются бинами и не имеют зависимостей, локальное создание через new может быть приемлемым. Это может включать в себя создание простых объектов для временного использования внутри метода, которые не требуют управления контейнером.
Spring Framework. Proxy
17:09
PavelVil
Рет қаралды 3,3 М.
CI/CD - Простым языком на понятном примере
15:29
Артём Шумейко
Рет қаралды 108 М.
За кого болели?😂
00:18
МЯТНАЯ ФАНТА
Рет қаралды 2,6 МЛН
Players vs Pitch 🤯
00:26
LE FOOT EN VIDÉO
Рет қаралды 128 МЛН
Транзакции - Spring Framework в деталях
1:20:21
Уголок сельского джависта
Рет қаралды 27 М.
Spring Framework. Custom Scope
21:29
PavelVil
Рет қаралды 626
Аудит изменений данных в Spring Data JPA
24:20
Spring Tips: Spring's Application Event Subsystem
20:23
SpringDeveloper
Рет қаралды 15 М.
Spring Framework. Постпроцессоры
15:23
PavelVil
Рет қаралды 1,9 М.
Spring Framework. Свойства приложения
16:05
Spring Framework. SpEL
38:57
PavelVil
Рет қаралды 876
За кого болели?😂
00:18
МЯТНАЯ ФАНТА
Рет қаралды 2,6 МЛН