Obsługa zdarzeń wiosną

Widzieliście we wszystkich rozdziałach, że rdzeniem Wiosny jest ApplicationContext, który zarządza całym cyklem życia ziaren. ApplicationContext publikuje określone typy zdarzeń podczas ładowania komponentów bean. Na przykład ContextStartedEvent jest publikowane, gdy kontekst jest uruchamiany, a ContextStoppedEvent jest publikowany, gdy kontekst jest zatrzymany.

Postępowania w przypadku ApplicationContext jest poprzez ApplicationEvent klasy i ApplicationListener interfejsu. W związku z tym, jeśli komponent bean implementuje ApplicationListener , to za każdym razem, gdy ApplicationEvent zostanie opublikowany w ApplicationContext, zostanie o tym powiadomiony.

Wiosna zapewnia następujące standardowe wydarzenia -

Sr.No. Wbudowane wydarzenia i opis wiosny
1

ContextRefreshedEvent

To zdarzenie jest publikowane, gdy ApplicationContext jest inicjowany lub odświeżany. Można to również wywołać za pomocą metody refresh () w interfejsie ConfigurableApplicationContext .

2

ContextStartedEvent

To zdarzenie jest publikowane, gdy ApplicationContext jest uruchamiany przy użyciu metody start () w interfejsie ConfigurableApplicationContext . Możesz sondować swoją bazę danych lub możesz ponownie uruchomić każdą zatrzymaną aplikację po otrzymaniu tego zdarzenia.

3

ContextStoppedEvent

To zdarzenie jest publikowane po zatrzymaniu ApplicationContext przy użyciu metody stop () w interfejsie ConfigurableApplicationContext . Po otrzymaniu tego wydarzenia możesz wykonać wymagane prace domowe.

4

ContextClosedEvent

To zdarzenie jest publikowane po zamknięciu ApplicationContext przy użyciu metody close () w interfejsie ConfigurableApplicationContext . Zamknięty kontekst dobiega końca; nie można go odświeżyć ani ponownie uruchomić.

5

RequestHandledEvent

Jest to zdarzenie specyficzne dla sieci WWW, informujące wszystkie komponenty bean, że żądanie HTTP zostało obsłużone.

Obsługa zdarzeń Springa jest jednowątkowa, więc jeśli zdarzenie zostanie opublikowane, dopóki wszyscy odbiorcy nie otrzymają komunikatu, procesy są blokowane i przepływ nie będzie kontynuowany. Dlatego podczas projektowania aplikacji należy zachować ostrożność, jeśli ma być używana obsługa zdarzeń.

Słuchanie wydarzeń kontekstowych

Aby nasłuchiwać zdarzenia kontekstu, komponent bean powinien implementować interfejs ApplicationListener , który ma tylko jedną metodęonApplicationEvent(). Napiszmy więc przykład, aby zobaczyć, w jaki sposób zdarzenia się propagują i jak możesz umieścić kod, aby wykonać wymagane zadanie na podstawie określonych zdarzeń.

Przygotujmy działające środowisko Eclipse IDE i wykonaj następujące czynności, aby utworzyć aplikację Spring -

Krok Opis
1 Utwórz projekt o nazwie SpringExample i utwórz pakiet com.tutorialspoint w obszarzesrc folder w utworzonym projekcie.
2 Dodaj wymagane biblioteki Spring za pomocą opcji Dodaj zewnętrzne pliki JAR , jak wyjaśniono w rozdziale Spring Hello World Example .
3 Utwórz klasy Java HelloWorld , CStartEventHandler , CStopEventHandler i MainApp w pakiecie com.tutorialspoint .
4 Utwórz plik konfiguracyjny Beans Beans.xml w obszarzesrc teczka.
5 Ostatnim krokiem jest utworzenie zawartości wszystkich plików Java i pliku konfiguracyjnego Bean i uruchomienie aplikacji, jak wyjaśniono poniżej.

Oto treść HelloWorld.java plik

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

Poniżej znajduje się zawartość CStartEventHandler.java plik

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

Poniżej znajduje się zawartość CStopEventHandler.java plik

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

Poniżej znajduje się zawartość MainApp.java plik

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

Poniżej znajduje się plik konfiguracyjny 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>

Po utworzeniu plików źródłowych i konfiguracyjnych komponentów bean uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat -

ContextStartedEvent Received
Your Message : Hello World!
ContextStoppedEvent Received

Jeśli chcesz, możesz opublikować własne zdarzenia niestandardowe, a później możesz je uchwycić, aby podjąć dowolne działanie przeciwko tym zdarzeniom niestandardowym. Jeśli jesteś zainteresowany pisaniem własnych wydarzeń niestandardowych, możesz sprawdzić zdarzenia niestandardowe na wiosnę.