Eventos de contexto do aplicativo Spring

Eventos de contexto do aplicativo Spring

1. Introdução

Neste tutorial, aprenderemos sobre o mecanismo de suporte a eventos fornecido pela estrutura Spring. Exploraremos os vários eventos integrados fornecidos pela estrutura e veremos como consumir um evento.

Para aprender a criar e publicar eventos personalizados, dê uma olhada emour previous tutorial here.

Spring tem um mecanismo de eventos que é construído em torno deApplicationContext. Ele pode ser usado paraexchange information between different beans. Podemos fazer uso de eventos de aplicativo ouvindo eventos e executando código personalizado.

Por exemplo, um cenário aqui seria executar a lógica personalizada na inicialização completa deApplicationContext.

2. Eventos de contexto padrão

Na verdade, há uma variedade de eventos integrados no Spring, quelets a developer hook into the lifecycle of an application and the contexte fazem algumas operações personalizadas.

Embora raramente utilizemos esses eventos manualmente em um aplicativo, a estrutura os utiliza intensamente em si. Vamos começar explorando vários eventos integrados na primavera.

2.1. ContextRefreshedEvent

Eminitializing or refreshing the*ApplicationContext*,, a primavera aumentaContextRefreshedEvent. Normalmente, uma atualização pode ser acionada várias vezes, desde que o contexto não tenha sido fechado.

Observe que também podemos ter o evento disparado manualmente chamando o métodorefresh() na interfaceConfigurableApplicationContext.

2.2. ContextStartedEvent

By calling the start() method emConfigurableApplicationContext,, disparamos este evento e iniciamos oApplicationContext. Por uma questão de fato, o método é normalmente usado para reiniciar beans após uma parada explícita. Também podemos usar o método para lidar com componentes sem configuração para inicialização automática.

Aqui, é importante observar que a chamada parastart() é sempre explícita, ao contrário de refrescar ().

2.3. ContextStoppedEvent

UmContextStoppedEvent é publicadowhen the ApplicationContext is stopped, invocando o métodostop() emConfigurableApplicationContext. Como discutido anteriormente, podemos reiniciar um evento interrompido usando o métodostart().

2.4. ContextClosedEvent

Este evento é publicadowhen the ApplicationContext is closed, usando o métodoclose() emConfigurableApplicationContext. Na verdade, depois de fechar um contexto, não podemos reiniciá-lo.

Um contexto chega ao fim de sua vida ao fechá-lo e, portanto, não podemos reiniciá-lo como em umContextStoppedEvent.

3. @EventListener

Em seguida, vamos explorar como consumir os eventos publicados. A partir da versão 4.2, Spring oferece suporte a um ouvinte de evento orientado por anotações -@EventListener.

Em particular, podemos fazer uso desta anotação paraautomatically register an ApplicationListener based on the signature of the method:

@EventListener
public void handleContextRefreshEvent(ContextStartedEvent ctxStartEvt) {
    System.out.println("Context Start Event received.");
}

Significativamente,@EventListener is a core annotation and hence doesn’t need any extra configuration. Na verdade, o elemento<context:annotation-driven/> existente fornece suporte total para ele.

Um método anotado com@EventListener pode retornar um tipo não vazio. Se o valor retornado não for nulo, o mecanismo de eventos publicará um novo evento para ele.

3.1. Ouvindo vários eventos

Agora, podem surgir situações em que precisaremos que nosso ouvinte consuma vários eventos.

Para tal cenário, podemos fazer uso do atributoclasses:

@EventListener(classes = { ContextStartedEvent.class, ContextStoppedEvent.class })
public void handleMultipleEvents() {
    System.out.println("Multi-event listener invoked");
}

4. Application Event Listener

Se estivermos usando versões anteriores do Spring (<4.2), teremos que introduzir umcustom ApplicationEventListener and override the method onApplicationEvent para ouvir um evento.

5. Conclusão

Neste artigo, exploramos os vários eventos integrados na primavera. Além disso, vimos várias maneiras de ouvir os eventos publicados.

Como sempre, os trechos de código usados ​​no artigo podem ser encontradosover on Github.