Manejo de eventos en primavera

Has visto en todos los capítulos que el núcleo de Spring es el ApplicationContext, que gestiona el ciclo de vida completo de los frijoles. ApplicationContext publica ciertos tipos de eventos al cargar los beans. Por ejemplo, un ContextStartedEvent se publica cuando se inicia el contexto y ContextStoppedEvent se publica cuando se detiene el contexto.

Manipulación en el Evento ApplicationContext se proporciona a través de la ApplicationEvent clase y ApplicationListener interfaz. Por lo tanto, si un bean implementa ApplicationListener , cada vez que se publica un ApplicationEvent en ApplicationContext, se notifica a ese bean.

Spring proporciona los siguientes eventos estándar:

No Señor. Eventos incorporados de primavera y descripción
1

ContextRefreshedEvent

Este evento se publica cuando ApplicationContext se inicializa o actualiza. Esto también se puede generar usando el método refresh () en la interfaz ConfigurableApplicationContext .

2

ContextStartedEvent

Este evento se publica cuando se inicia ApplicationContext utilizando el método start () en la interfaz ConfigurableApplicationContext . Puede sondear su base de datos o puede reiniciar cualquier aplicación detenida después de recibir este evento.

3

ContextStoppedEvent

Este evento se publica cuando ApplicationContext se detiene mediante el método stop () en la interfaz ConfigurableApplicationContext . Puede realizar el trabajo de limpieza requerido después de recibir este evento.

4

ContextClosedEvent

Este evento se publica cuando se cierra ApplicationContext mediante el método close () en la interfaz ConfigurableApplicationContext . Un contexto cerrado llega al final de su vida; no se puede actualizar ni reiniciar.

5

RequestHandledEvent

Este es un evento específico de la web que le dice a todos los beans que se ha atendido una solicitud HTTP.

El manejo de eventos de Spring es de un solo subproceso, por lo que si se publica un evento, hasta que todos los receptores reciban el mensaje, los procesos se bloquean y el flujo no continuará. Por lo tanto, se debe tener cuidado al diseñar su aplicación si se va a utilizar el manejo de eventos.

Escuchar eventos de contexto

Para escuchar un evento de contexto, un bean debe implementar la interfaz ApplicationListener que tiene solo un métodoonApplicationEvent(). Entonces, escribamos un ejemplo para ver cómo se propagan los eventos y cómo puede poner su código para realizar la tarea requerida en función de ciertos eventos.

Tengamos un IDE de Eclipse en funcionamiento y sigamos los siguientes pasos para crear una aplicación Spring:

Paso Descripción
1 Cree un proyecto con un nombre SpringExample y cree un paquete com.tutorialspoint bajo elsrc carpeta en el proyecto creado.
2 Agregue las bibliotecas Spring requeridas usando la opción Agregar JAR externos como se explica en el capítulo Ejemplo de Spring Hello World .
3 Cree clases de Java HelloWorld , CStartEventHandler , CStopEventHandler y MainApp en el paquete com.tutorialspoint .
4 Cree el archivo de configuración de Beans Beans.xml bajo elsrc carpeta.
5 El paso final es crear el contenido de todos los archivos Java y el archivo de configuración de Bean y ejecutar la aplicación como se explica a continuación.

Aquí está el contenido de HelloWorld.java archivo

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

A continuación se muestra el contenido de la CStartEventHandler.java archivo

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

A continuación se muestra el contenido de la CStopEventHandler.java archivo

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

A continuación se muestra el contenido de la MainApp.java archivo

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

A continuación se muestra el archivo de configuración 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 vez que haya terminado de crear los archivos de configuración de fuente y bean, ejecutemos la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje:

ContextStartedEvent Received
Your Message : Hello World!
ContextStoppedEvent Received

Si lo desea, puede publicar sus propios eventos personalizados y luego puede capturar los mismos para tomar cualquier acción contra esos eventos personalizados. Si está interesado en escribir sus propios eventos personalizados, puede consultar Eventos personalizados en Spring.