Учебники

Обработка событий весной

Во всех главах вы видели, что ядром Spring является ApplicationContext , который управляет полным жизненным циклом bean-компонентов. ApplicationContext публикует определенные типы событий при загрузке бинов. Например, ContextStartedEvent публикуется при запуске контекста, а ContextStoppedEvent публикуется при остановке контекста.

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

Spring предоставляет следующие стандартные события —

Sr.No. Весенние встроенные события и описание
1

ContextRefreshedEvent

Это событие публикуется, когда ApplicationContext инициализируется или обновляется. Это также можно поднять с помощью метода refresh () в интерфейсе ConfigurableApplicationContext .

2

ContextStartedEvent

Это событие публикуется, когда ApplicationContext запускается с помощью метода start () в интерфейсе ConfigurableApplicationContext . Вы можете опросить свою базу данных или перезапустить любое остановленное приложение после получения этого события.

3

ContextStoppedEvent

Это событие публикуется, когда ApplicationContext останавливается с помощью метода stop () в интерфейсе ConfigurableApplicationContext . Вы можете выполнять необходимую работу по дому после получения этого события.

4

ContextClosedEvent

Это событие публикуется, когда ApplicationContext закрывается с помощью метода close () в интерфейсе ConfigurableApplicationContext . Закрытый контекст достигает конца жизни; это не может быть обновлено или перезапущено.

5

RequestHandledEvent

Это веб-событие, сообщающее всем компонентам, что HTTP-запрос был обслужен.

ContextRefreshedEvent

Это событие публикуется, когда ApplicationContext инициализируется или обновляется. Это также можно поднять с помощью метода refresh () в интерфейсе ConfigurableApplicationContext .

ContextStartedEvent

Это событие публикуется, когда ApplicationContext запускается с помощью метода start () в интерфейсе ConfigurableApplicationContext . Вы можете опросить свою базу данных или перезапустить любое остановленное приложение после получения этого события.

ContextStoppedEvent

Это событие публикуется, когда ApplicationContext останавливается с помощью метода stop () в интерфейсе ConfigurableApplicationContext . Вы можете выполнять необходимую работу по дому после получения этого события.

ContextClosedEvent

Это событие публикуется, когда ApplicationContext закрывается с помощью метода close () в интерфейсе ConfigurableApplicationContext . Закрытый контекст достигает конца жизни; это не может быть обновлено или перезапущено.

RequestHandledEvent

Это веб-событие, сообщающее всем компонентам, что HTTP-запрос был обслужен.

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

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

Чтобы прослушивать контекстное событие, компонент должен реализовывать интерфейс ApplicationListener, который имеет только один метод onApplicationEvent () . Итак, давайте напишем пример, чтобы увидеть, как события распространяются и как вы можете использовать свой код для выполнения требуемой задачи на основе определенных событий.

Давайте создадим рабочую среду Eclipse и предпримем следующие шаги для создания приложения Spring:

шаг Описание
1 Создайте проект с именем SpringExample и создайте пакет com.tutorialspoint в папке src в созданном проекте.
2 Добавьте необходимые библиотеки Spring с помощью параметра « Добавить внешние JAR-файлы», как описано в главе « Пример Hello World» .
3 Создайте классы Java HelloWorld , CStartEventHandler , CStopEventHandler и MainApp в пакете com.tutorialspoint .
4 Создайте файл конфигурации Beans Beans.xml в папке src .
5 Последний шаг — создать содержимое всех файлов Java и файла конфигурации Bean и запустить приложение, как описано ниже.

Вот содержимое файла HelloWorld.java

package com.tutorialspoint;

public class HelloWorld {
   private String message;

   public void setMessage(String message){
      this.message  = message;
   }
   public void getMessage(){
      System.out.println("Your Message : " + message);
   }
}

Ниже приводится содержание файла CStartEventHandler.java

package com.tutorialspoint;

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextStartedEvent;

public class CStartEventHandler 
   implements ApplicationListener<ContextStartedEvent>{

   public void onApplicationEvent(ContextStartedEvent event) {
      System.out.println("ContextStartedEvent Received");
   }
}

Ниже приводится содержимое файла CStopEventHandler.java.

package com.tutorialspoint;

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextStoppedEvent;

public class CStopEventHandler 
   implements ApplicationListener<ContextStoppedEvent>{

   public void onApplicationEvent(ContextStoppedEvent event) {
      System.out.println("ContextStoppedEvent Received");
   }
}

Ниже приводится содержание файла MainApp.java

package com.tutorialspoint;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      ConfigurableApplicationContext context = 
         new ClassPathXmlApplicationContext("Beans.xml");

      // Let us raise a start event.
      context.start();
	  
      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
      obj.getMessage();

      // Let us raise a stop event.
      context.stop();
   }
}

Ниже приведен файл конфигурации Beans.xml

<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld">
      <property name = "message" value = "Hello World!"/>
   </bean>

   <bean id = "cStartEventHandler" class = "com.tutorialspoint.CStartEventHandler"/>
   <bean id = "cStopEventHandler" class = "com.tutorialspoint.CStopEventHandler"/>

</beans>

Как только вы закончили создавать файлы конфигурации исходного кода и bean-компонента, давайте запустим приложение Если с вашим приложением все в порядке, оно напечатает следующее сообщение:

ContextStartedEvent Received
Your Message : Hello World!
ContextStoppedEvent Received

При желании вы можете опубликовать свои собственные пользовательские события, а затем вы можете захватить их, чтобы предпринять какие-либо действия против этих пользовательских событий. Если вы заинтересованы в написании собственных пользовательских событий, вы можете проверить пользовательские события весной.