Gestion des événements au printemps

Vous avez vu dans tous les chapitres que le cœur de Spring est le ApplicationContext, qui gère le cycle de vie complet des beans. L'ApplicationContext publie certains types d'événements lors du chargement des beans. Par exemple, un ContextStartedEvent est publié lorsque le contexte est démarré et ContextStoppedEvent est publié lorsque le contexte est arrêté.

La gestion des événements dans le ApplicationContext est fourni par la ApplicationEvent classe et ApplicationListener interface. Par conséquent, si un bean implémente ApplicationListener , chaque fois qu'un ApplicationEvent est publié dans ApplicationContext, ce bean est notifié.

Spring fournit les événements standard suivants -

Sr.No. Événements et description intégrés au printemps
1

ContextRefreshedEvent

Cet événement est publié lorsque ApplicationContext est initialisé ou actualisé. Cela peut également être déclenché à l'aide de la méthode refresh () sur l' interface ConfigurableApplicationContext .

2

ContextStartedEvent

Cet événement est publié lorsque ApplicationContext est démarré à l'aide de la méthode start () sur l' interface ConfigurableApplicationContext . Vous pouvez interroger votre base de données ou vous pouvez redémarrer toute application arrêtée après avoir reçu cet événement.

3

ContextStoppedEvent

Cet événement est publié lorsque le ApplicationContext est arrêté à l'aide de la méthode stop () sur l' interface ConfigurableApplicationContext . Vous pouvez effectuer les travaux d'entretien nécessaires après avoir reçu cet événement.

4

ContextClosedEvent

Cet événement est publié lorsque le ApplicationContext est fermé à l'aide de la méthode close () sur l' interface ConfigurableApplicationContext . Un contexte fermé atteint sa fin de vie; il ne peut pas être actualisé ou redémarré.

5

RequestHandledEvent

Il s'agit d'un événement spécifique au Web indiquant à tous les beans qu'une requête HTTP a été traitée.

La gestion des événements de Spring est monothread, donc si un événement est publié, jusqu'à ce que et à moins que tous les destinataires reçoivent le message, les processus sont bloqués et le flux ne continuera pas. Par conséquent, des précautions doivent être prises lors de la conception de votre application si la gestion des événements doit être utilisée.

Écoute des événements contextuels

Pour écouter un événement de contexte, un bean doit implémenter l' interface ApplicationListener qui n'a qu'une seule méthodeonApplicationEvent(). Alors, écrivons un exemple pour voir comment les événements se propagent et comment vous pouvez mettre votre code pour effectuer la tâche requise en fonction de certains événements.

Laissez-nous mettre en place un IDE Eclipse fonctionnel et suivez les étapes suivantes pour créer une application Spring -

Étape La description
1 Créez un projet avec un nom SpringExample et créez un package com.tutorialspoint sous lesrc dossier dans le projet créé.
2 Ajoutez les bibliothèques Spring requises à l'aide de l' option Ajouter des JAR externes comme expliqué dans le chapitre Exemple de Spring Hello World .
3 Créez les classes Java HelloWorld , CStartEventHandler , CStopEventHandler et MainApp sous le package com.tutorialspoint .
4 Créez le fichier de configuration Beans Beans.xml sous lesrc dossier.
5 La dernière étape consiste à créer le contenu de tous les fichiers Java et le fichier de configuration Bean et à exécuter l'application comme expliqué ci-dessous.

Voici le contenu de HelloWorld.java fichier

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

Voici le contenu de la CStartEventHandler.java fichier

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

Voici le contenu de la CStopEventHandler.java fichier

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

Voici le contenu de la MainApp.java fichier

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

Voici le fichier de configuration 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>

Une fois que vous avez terminé de créer les fichiers de configuration source et bean, laissez-nous exécuter l'application. Si tout va bien avec votre application, elle imprimera le message suivant -

ContextStartedEvent Received
Your Message : Hello World!
ContextStoppedEvent Received

Si vous le souhaitez, vous pouvez publier vos propres événements personnalisés et plus tard, vous pouvez les capturer pour entreprendre une action contre ces événements personnalisés. Si vous souhaitez écrire vos propres événements personnalisés, vous pouvez consulter les événements personnalisés au printemps.