Événements de contexte d’application printaniers

Événements de contexte d'application printaniers

1. introduction

Dans ce didacticiel, nous allons découvrir le mécanisme de prise en charge des événements fourni par le framework Spring. Nous explorerons les différents événements intégrés fournis par le framework, puis verrons comment consommer un événement.

Pour en savoir plus sur la création et la publication d'événements personnalisés, jetez un œil àour previous tutorial here.

Spring a un mécanisme d'événement qui est construit autour desApplicationContext.. Il peut être utilisé pour lesexchange information between different beans..

Par exemple, un scénario ici serait d'exécuter une logique personnalisée lors du démarrage complet desApplicationContext.

2. Événements de contexte standard

En fait, il existe une variété d'événements intégrés dans Spring, quelets a developer hook into the lifecycle of an application and the context et effectuent des opérations personnalisées.

Même si nous utilisons rarement ces événements manuellement dans une application, le framework les utilise intensément en lui-même. Commençons par explorer divers événements intégrés au printemps.

2.1. ContextRefreshedEvent

Sur l'un ou l'autre desinitializing or refreshing the*ApplicationContext*, Spring soulève leContextRefreshedEvent. Généralement, une actualisation peut être déclenchée plusieurs fois tant que le contexte n'a pas été fermé.

Notez que nous pouvons également faire déclencher l'événement manuellement en appelant la méthoderefresh() sur l'interfaceConfigurableApplicationContext.

2.2. ContextStartedEvent

By calling the start() method sur lesConfigurableApplicationContext, nous déclenchons cet événement et démarrons lesApplicationContext. En fait, la méthode est généralement utilisée pour redémarrer les beans après un arrêt explicite. Nous pouvons également utiliser cette méthode pour gérer des composants sans configuration pour le démarrage automatique.

Ici, il est important de noter que l'appel àstart() est toujours explicite par opposition à rafraîchir ().

2.3. ContextStoppedEvent

UnContextStoppedEvent est publiéwhen the ApplicationContext is stopped, en invoquant la méthodestop() sur leConfigurableApplicationContext. Comme indiqué précédemment, nous pouvons redémarrer un événement arrêté en utilisant la méthodestart().

2.4. ContextClosedEvent

Cet événement est publiéwhen the ApplicationContext is closed, en utilisant la méthodeclose() dansConfigurableApplicationContext. En réalité, après la fermeture d'un contexte, nous ne pouvons pas le redémarrer.

Un contexte atteint sa fin de vie en le fermant et nous ne pouvons donc pas le redémarrer comme dans unContextStoppedEvent.

3. @EventListener

Explorons ensuite comment utiliser les événements publiés. À partir de la version 4.2, Spring prend en charge un écouteur d'événement basé sur les annotations -@EventListener.

En particulier, nous pouvons utiliser cette annotation pourautomatically register an ApplicationListener based on the signature of the method:

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

Significativement,@EventListener is a core annotation and hence doesn’t need any extra configuration. En fait, l'élément<context:annotation-driven/> existant en fournit un support complet.

Une méthode annotée avec@EventListener peut renvoyer un type non void. Si la valeur renvoyée est non NULL, le mécanisme des événements publiera un nouvel événement pour ce dernier.

3.1. Écoute de plusieurs événements

Maintenant, il peut arriver que nous ayons besoin que notre auditeur consomme plusieurs événements.

Pour un tel scénario, nous pouvons utiliser l'attributclasses:

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

4. Écouteur d'événements d'application

Si nous utilisons des versions antérieures de Spring (<4.2), nous devrons introduire uncustom ApplicationEventListener and override the method onApplicationEvent pour écouter un événement.

5. Conclusion

Dans cet article, nous avons exploré les différents événements intégrés de Spring. De plus, nous avons vu différentes manières d'écouter les événements publiés.

Comme toujours, les extraits de code utilisés dans l'article peuvent être trouvésover on Github.