Frühling: @EventListener in Frühling 4.2

In diesem Tutorial werden die Vorteile der Verwendung von @EventListener in Spring 4.2 zum Abhören der Ereignisse hervorgehoben.

Eine der wichtigsten Funktionen, die in Spring 4.2 hinzugefügt wurden, ist die Unterstützung von annotationsgesteuerten Ereignis-Listenern. Jetzt können Sie eine Methode mit der Annotation @EventListener aktivieren/markieren.

lesen Sie auch:

  • Frühlings-Tutorials
  • ContextRefreshedEvent und ApplicationListener im Frühjahr

@EventListener ist die Kernanmerkung zum Aktivieren und Registrieren des ApplicationListener für Ihre Anwendungen. Es sind keine weiteren Konfigurationen erforderlich, damit dies funktioniert. In diesem Tutorial wird @EventListener anhand eines einfachen, verständlichen Beispiels erläutert.

EventListener in Spring 4

Im folgenden Beispiel erstelle ich eine Bestellung und sende bei jeder neuen Bestellung eine Benachrichtigung. Wir müssen drei Klassen erstellen, um den Benachrichtigungsmechanismus zu implementieren.

  • Erstellen Sie OrderEvent, das die ApplicationEvent-Klasse erweitert.
  • Create OrderService implementiert die ApplicationEventPublisherAware-Schnittstelle. Sie müssen diese Klasse in der XML-Konfigurationsdatei als Bean deklarieren, damit der Container die Bean als Ereignisherausgeber identifizieren kann, da sie die Schnittstelle ApplicationEventPublisherAware implementiert.
  • Erstellen Sie eine OrderNotification-Klasse, die tatsächlich @EventListener für die Methoden verwendet, die für die registrierten Ereignisse ausgelöst werden. Diese Klasse muss auch in den XML-Konfigurationen deklariert werden.
  • Wenn Sie sich das folgende Beispielprogramm ansehen, wird es Ihnen helfen zu verstehen, wie Sie @EventListener in Ihrem Projekt verwenden. Dies ist ein einfaches Beispiel zur Veranschaulichung der API-Nutzung.

    OrderEvent.java

    package javabeat.net.spring.core;
    import org.springframework.context.ApplicationEvent;
    public class OrderEvent extends ApplicationEvent{
       private static final long serialVersionUID = 1L;
       private int orderId;
       public OrderEvent(Object source, int id){
          super(source);
          this.orderId = id;
          System.out.println("Order Event Created!!");
       }
       public int getOrderId() {
          return orderId;
       }
    
        public void setOrderId(int orderId) {
          this.orderId = orderId;
        }
    }
    
    

    OrderService.java

    package javabeat.net.spring.core;
    import org.springframework.context.ApplicationEventPublisher;
    import org.springframework.context.ApplicationEventPublisherAware;
    public class OrderService implements ApplicationEventPublisherAware{
       private ApplicationEventPublisher publisher;
       public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
          this.publisher = publisher;
       }
       public void createOrder(int orderId){
          System.out.println("Order Created");
          OrderEvent event = new OrderEvent(this, orderId);
          System.out.println("Publishing Order Event");
          publisher.publishEvent(event);
       }
    }
    

    OrderNotification.java

    package javabeat.net.spring.core;
    import org.springframework.context.event.EventListener;
    public class OrderNotification {
       private int notificationId;
       public int getNotificationId() {
           return notificationId;
       }
       public void setNotificationId(int notificationId) {
           this.notificationId = notificationId;
       }
       @EventListener
       public void processOrderEvent(OrderEvent event) {
            System.out.println("OrderEvent for Order Id : " + event.getOrderId());
       }
    }
    

    applicationContext.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" xmlns:websocket="http://www.springframework.org/schema/websocket"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context.xsd
     http://www.springframework.org/schema/websocket
     http://www.springframework.org/schema/websocket/spring-websocket-4.2.xsd">
       <context:component-scan base-package="javabeat.net.spring.core" />
       <bean id="orderService"  />
       <bean id="orderNotifier"  />
    </beans>
    

    MainApp.java

    package javabeat.net.spring.core;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    public class MainApp {
         public static void main(String args[]){
               ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationConte          xt("applicationContext.xml");
              OrderService orderService = (OrderService)applicationContext.getBean("orderService")           ;
              orderService.createOrder(001);
              applicationContext.close();
     }
    }
    
    

    Die Ausgabe für das obige Programm lautet:

    Order Created
    Order Event Created!!
    Publishing Order Event
    OrderEvent for Order Id : 1
    

    Kommentar verfassen

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

    Nach oben scrollen