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

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

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

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

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

ContextRefreshedEvent

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

2

ContextStartedEvent

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

3

ContextStoppedEvent

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

4

ContextClosedEvent

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

5

RequestHandledEvent

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

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

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

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

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

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

Вот содержание 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

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