Gestione degli eventi in primavera

Hai visto in tutti i capitoli che il cuore della primavera è il ApplicationContext, che gestisce l'intero ciclo di vita dei chicchi. ApplicationContext pubblica determinati tipi di eventi durante il caricamento dei bean. Ad esempio, un ContextStartedEvent viene pubblicato quando il contesto viene avviato e ContextStoppedEvent viene pubblicato quando il contesto viene interrotto.

La gestione in caso ApplicationContext è fornita attraverso l'ApplicationEvent di classe e ApplicationListener interfaccia. Quindi, se un bean implementa ApplicationListener , ogni volta che un ApplicationEvent viene pubblicato in ApplicationContext, quel bean riceve una notifica.

La primavera offre i seguenti eventi standard:

Sr.No. Eventi e descrizione incorporati di primavera
1

ContextRefreshedEvent

Questo evento viene pubblicato quando ApplicationContext viene inizializzato o aggiornato. Questo può anche essere generato utilizzando il metodo refresh () sull'interfaccia ConfigurableApplicationContext .

2

ContextStartedEvent

Questo evento viene pubblicato quando ApplicationContext viene avviato utilizzando il metodo start () sull'interfaccia ConfigurableApplicationContext . È possibile eseguire il polling del database o riavviare qualsiasi applicazione arrestata dopo aver ricevuto questo evento.

3

ContextStoppedEvent

Questo evento viene pubblicato quando ApplicationContext viene arrestato utilizzando il metodo stop () sull'interfaccia ConfigurableApplicationContext . Dopo aver ricevuto questo evento, puoi svolgere il lavoro di pulizia richiesto.

4

ContextClosedEvent

Questo evento viene pubblicato quando ApplicationContext viene chiuso utilizzando il metodo close () sull'interfaccia ConfigurableApplicationContext . Un contesto chiuso raggiunge la sua fine della vita; non può essere aggiornato o riavviato.

5

RequestHandledEvent

Questo è un evento specifico per il web che dice a tutti i bean che una richiesta HTTP è stata soddisfatta.

La gestione degli eventi di Spring è a thread singolo, quindi se un evento viene pubblicato, fino a quando ea meno che tutti i destinatari non ricevano il messaggio, i processi vengono bloccati e il flusso non continuerà. Pertanto, è necessario prestare attenzione durante la progettazione dell'applicazione se è necessario utilizzare la gestione degli eventi.

Ascolto di eventi di contesto

Per ascoltare un evento di contesto, un bean dovrebbe implementare l' interfaccia ApplicationListener che ha un solo metodoonApplicationEvent(). Quindi scriviamo un esempio per vedere come si propagano gli eventi e come puoi inserire il tuo codice per eseguire l'attività richiesta in base a determinati eventi.

Cerchiamo di avere un IDE Eclipse funzionante e di eseguire i seguenti passaggi per creare un'applicazione Spring:

Passo Descrizione
1 Crea un progetto con un nome SpringExample e crea un pacchetto com.tutorialspoint sottosrc cartella nel progetto creato.
2 Aggiungere le librerie Spring richieste utilizzando l' opzione Aggiungi JAR esterni come spiegato nel capitolo Esempio Spring Hello World .
3 Crea classi Java HelloWorld , CStartEventHandler , CStopEventHandler e MainApp nel pacchetto com.tutorialspoint .
4 Crea il file di configurazione Beans Beans.xml sottosrc cartella.
5 Il passaggio finale consiste nel creare il contenuto di tutti i file Java e nel file di configurazione Bean ed eseguire l'applicazione come spiegato di seguito.

Ecco il contenuto di HelloWorld.java file

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);
   }
}

Di seguito è riportato il contenuto del file CStartEventHandler.java file

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");
   }
}

Di seguito è riportato il contenuto del file CStopEventHandler.java file

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");
   }
}

Di seguito è riportato il contenuto del file MainApp.java file

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();
   }
}

Di seguito è riportato il file di configurazione 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>

Una volta terminata la creazione dei file di configurazione dei bean e dei sorgenti, eseguiamo l'applicazione. Se tutto va bene con la tua applicazione, stamperà il seguente messaggio:

ContextStartedEvent Received
Your Message : Hello World!
ContextStoppedEvent Received

Se lo desideri, puoi pubblicare i tuoi eventi personalizzati e successivamente puoi acquisire gli stessi per intraprendere qualsiasi azione contro quegli eventi personalizzati. Se sei interessato a scrivere i tuoi eventi personalizzati, puoi controllare Eventi personalizzati in primavera.