Tratamento de eventos na primavera

Você viu em todos os capítulos que o cerne do Spring é o ApplicationContext, que gerencia o ciclo de vida completo dos grãos. O ApplicationContext publica certos tipos de eventos ao carregar os beans. Por exemplo, um ContextStartedEvent é publicado quando o contexto é iniciado e ContextStoppedEvent é publicado quando o contexto é interrompido.

Manipulação no evento ApplicationContext é fornecido através do ApplicationEvent classe e ApplicationListener interface. Portanto, se um bean implementa o ApplicationListener , toda vez que um ApplicationEvent é publicado no ApplicationContext, esse bean é notificado.

Spring fornece os seguintes eventos padrão -

Sr. Não. Eventos e descrição integrados da mola
1

ContextRefreshedEvent

Este evento é publicado quando o ApplicationContext é inicializado ou atualizado. Isso também pode ser gerado usando o método refresh () na interface ConfigurableApplicationContext .

2

ContextStartedEvent

Este evento é publicado quando o ApplicationContext é iniciado usando o método start () na interface ConfigurableApplicationContext . Você pode pesquisar seu banco de dados ou reiniciar qualquer aplicativo interrompido após receber este evento.

3

ContextStoppedEvent

Este evento é publicado quando o ApplicationContext é interrompido usando o método stop () na interface ConfigurableApplicationContext . Você pode fazer o trabalho de limpeza necessário após receber este evento.

4

ContextClosedEvent

Este evento é publicado quando o ApplicationContext é fechado usando o método close () na interface ConfigurableApplicationContext . Um contexto fechado chega ao fim de sua vida; ele não pode ser atualizado ou reiniciado.

5

RequestHandledEvent

Este é um evento específico da web que informa a todos os beans que uma solicitação HTTP foi atendida.

O tratamento de eventos do Spring é de thread único, portanto, se um evento for publicado, até e a menos que todos os receptores recebam a mensagem, os processos são bloqueados e o fluxo não continuará. Portanto, deve-se tomar cuidado ao projetar seu aplicativo se o tratamento de eventos for usado.

Ouvindo eventos de contexto

Para ouvir um evento de contexto, um bean deve implementar a interface ApplicationListener , que possui apenas um métodoonApplicationEvent(). Então, vamos escrever um exemplo para ver como os eventos se propagam e como você pode colocar seu código para fazer a tarefa necessária com base em certos eventos.

Vamos ter um Eclipse IDE funcionando e seguir os seguintes passos para criar um aplicativo Spring -

Degrau Descrição
1 Crie um projeto com um nome SpringExample e crie um pacote com.tutorialspoint sob osrc pasta no projeto criado.
2 Adicione as bibliotecas Spring necessárias usando a opção Adicionar JARs externos, conforme explicado no capítulo Exemplo do Spring Hello World .
3 Crie classes Java HelloWorld , CStartEventHandler , CStopEventHandler e MainApp sob o pacote com.tutorialspoint .
4 Crie o arquivo de configuração do Beans Beans.xml sob osrc pasta.
5 A etapa final é criar o conteúdo de todos os arquivos Java e do arquivo de configuração do Bean e executar o aplicativo conforme explicado abaixo.

Aqui está o conteúdo de HelloWorld.java Arquivo

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 seguir está o conteúdo do CStartEventHandler.java Arquivo

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 seguir está o conteúdo do CStopEventHandler.java Arquivo

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 seguir está o conteúdo do MainApp.java Arquivo

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 seguir está o arquivo de configuração 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>

Assim que terminar de criar os arquivos de configuração de código-fonte e bean, vamos executar o aplicativo. Se tudo estiver bem com seu aplicativo, ele imprimirá a seguinte mensagem -

ContextStartedEvent Received
Your Message : Hello World!
ContextStoppedEvent Received

Se desejar, você pode publicar seus próprios eventos personalizados e, posteriormente, capturar os mesmos para realizar qualquer ação contra esses eventos personalizados. Se você estiver interessado em escrever seus próprios eventos personalizados, pode verificar Eventos personalizados na primavera.