Lorsqu'un événement est publié sur l'applicationContext fourni par Spring et est détecté par l'auditeur, la méthode de traitement correspondante sera exécutée.
L'événement lui-même <r / Br /> est une classe personnalisée qui doit hériter ApplicationEvent fournie par le printemps.
@Datapublic class MyEvent étend ApplicationEvent {private String msg; public myEvent (objet source, string msg) {super (source); this.msg = msg; }} Écoute d'événements
La méthode de base consiste à implémenter l'interface ApplicationListener , à personnaliser un écouteur, à implémenter onApplicationEvent() , puis à l'ajouter à ApplicationContext .
Par exemple:
classe publique MyListener implémente ApplicationListener <MyEvent> {@Override public void onApplicationEvent (MyEvent Event) {System.out.print ("Event MyEvent Speaking"); }} ... // Ajouter l'écouteur à la classe de démarrage de Springboot public static void main (String [] args) {SpringApplication Application = new SpringApplication (myApplication.class); application.AddListeners (new MyListener ()); application.run (args); } Vous pouvez également utiliser l'annotation @ EventListener (recommandé): le principe consiste à scanner cette annotation, à créer un écouteur et à l'ajouter à ApplicationContext .
@ Composant @ slf4jpublic class MyEventHandler {@EventListener public void handleEvent (MyEvent Event) { log.info("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Version de l'événement
Il peut être publié via la méthode de publication d'objets contextuelles ConfigurableApplicationContext::publishEvent() .
Vous pouvez également implémenter l'interface ApplicationEventPublisherAware à publier (recommandé).
@ Component @ SLF4JPublic Class Eventservice implémente ApplicationEventPublisheraware {public applicationEventPublisher Publisher; @Override public void setApplicationEventPublisher (ApplicationEventPublisher ApplicationEventPublisher) {this.publisher = applicationEventPublisher; } public String doEventWork (String msg) { Log.info ("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Publisher.PublishEvent (événement); Code de test
@ Springboottest @ runwith (springrunner.class) class eventserviceTest {@autowired private eventservice Service; @Test public void EventTest () {String msg = "Java Code"; Service.DoEventWork (MSG); }} Avis
S'il existe une relation d'héritage entre les deux événements, l'événement de sous-classe sera écouté d'abord, puis la classe parent sera écoutée après le traitement.
// MyEvent2 étend MyEvent @ composant @ SLF4JPublic class MyEventHandler {@EventListener public void handleevent (événement MyEvent) { Log.info ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Log.info ("---------------------- Événement de traitement: {}", event.getmsg ();Lorsque je publie un événement de sous-classe MyEvent2, le journal est le suivant:
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.