События контекста приложения Spring

События контекста приложения Spring

1. Вступление

В этом руководстве мы узнаем о механизме поддержки событий, предоставляемом средой Spring. Мы рассмотрим различные встроенные события, предоставляемые фреймворком, а затем посмотрим, как использовать событие.

Чтобы узнать о создании и публикации пользовательских событий, ознакомьтесь сour previous tutorial here.

Spring имеет механизм обработки событий, который построен наApplicationContext.. Его можно использовать дляexchange information between different beans.. Мы можем использовать события приложения, прислушиваясь к событиям и выполняя собственный код.

Например, сценарий здесь будет заключаться в выполнении пользовательской логики при полном запускеApplicationContext.

2. Стандартные события контекста

Фактически, в Spring есть множество встроенных событий, таких какlets a developer hook into the lifecycle of an application and the context и некоторые пользовательские операции.

Несмотря на то, что мы редко используем эти события вручную в приложении, инфраструктура интенсивно использует его внутри себя. Начнем с изучения различных встроенных событий Spring.

2.1. ContextRefreshedEventс

В любом случаеinitializing or refreshing the*ApplicationContext*, Spring поднимаетContextRefreshedEvent. Обычно обновление может запускаться несколько раз, если контекст не был закрыт.

Обратите внимание, что мы также можем запустить событие вручную, вызвав методrefresh() в интерфейсеConfigurableApplicationContext.

2.2. ContextStartedEventс

By calling the start() method наConfigurableApplicationContext,, мы запускаем это событие и запускаемApplicationContext. Фактически, этот метод обычно используется для перезапуска компонентов после явной остановки. Мы также можем использовать метод для работы с компонентами без конфигурации для автозапуска.

Здесь важно отметить, что вызовstart() всегда явный, в отличие от обновление ().

2.3. ContextStoppedEventс

ContextStoppedEvent публикуетсяwhen the ApplicationContext is stopped, вызывая методstop() дляConfigurableApplicationContext.. Как обсуждалось ранее, мы можем перезапустить остановленное событие, используя методstart().

2.4. ContextClosedEventс

Это событие публикуетсяwhen the ApplicationContext is closed с использованием методаclose() вConfigurableApplicationContext. В действительности, после закрытия контекста, мы не можем перезапустить его.

При закрытии контекст достигает конца своего жизненного цикла, поэтому мы не можем перезапустить его, как вContextStoppedEvent.

3. @EventListenerс

Далее давайте рассмотрим, как использовать опубликованные события. Начиная с версии 4.2 Spring поддерживает прослушиватель событий на основе аннотаций -@EventListener.

В частности, мы можем использовать эту аннотацию кautomatically register an ApplicationListener based on the signature of the method:

@EventListener
public void handleContextRefreshEvent(ContextStartedEvent ctxStartEvt) {
    System.out.println("Context Start Event received.");
}

Примечательно, что@EventListener is a core annotation and hence doesn’t need any extra configuration. Фактически, существующий элемент<context:annotation-driven/> полностью поддерживает его.

Метод, помеченный@EventListener, может возвращать непустой тип. Если возвращаемое значение не равно NULL, механизм обработки событий опубликует новое событие для него.

3.1. Прослушивание нескольких событий

Теперь могут возникнуть ситуации, когда нам понадобится наш слушатель для использования нескольких событий.

Для такого сценария мы можем использовать атрибутclasses:

@EventListener(classes = { ContextStartedEvent.class, ContextStoppedEvent.class })
public void handleMultipleEvents() {
    System.out.println("Multi-event listener invoked");
}

4. Слушатель событий приложения

Если мы используем более ранние версии Spring (<4.2), нам нужно будет ввестиcustom ApplicationEventListener and override the method onApplicationEvent для прослушивания события.

5. Заключение

В этой статье мы рассмотрели различные встроенные события Spring. Кроме того, мы видели различные способы прослушивания опубликованных событий.

Как всегда, фрагменты кода, использованные в статье, можно найти вover on Github.