Spring Data REST-Ereignisse mit @RepositoryEventHandler

Spring Data REST-Ereignisse mit @RepositoryEventHandler

1. Einführung

Während der Arbeit mit einer Entität verarbeitet der REST-Exporter Vorgänge zum Erstellen, Speichern und Löschen von Ereignissen. We can use an ApplicationListener to listen to these events and execute a function when the particular action is performed.

Alternativ können wiruse annotated handler which filters events based on domain type.

2. Schreiben eines mit Anmerkungen versehenen Handlers

DieApplicationListenerunterscheiden nicht zwischen Entitätstypen. aberwith the annotated handler, we can filter events based on domain type.

Wir können einen annotationsbasierten Ereignishandler deklarieren, indem wir@RepositoryEventHandler Annotation zu einem POJO hinzufügen. Infolgedessen informiert dies dieBeanPostProcessor darüber, dass das POJO auf Handler-Methoden überprüft werden muss.

Im folgenden Beispiel kommentieren wir die Klasse mitRepositoryEventHandler, die der EntitätAuthor – entsprechen, und deklarieren Methoden, die sich auf verschiedene Vorher- und Nachher-Ereignisse beziehen, die der EntitätAuthorin der KlasseAuthorEventHandlerentsprechen ::

@RepositoryEventHandler(Author.class)
public class AuthorEventHandler {
    Logger logger = Logger.getLogger("Class AuthorEventHandler");

    @HandleBeforeCreate
    public void handleAuthorBeforeCreate(Author author){
        logger.info("Inside Author Before Create....");
        String name = author.getName();
    }

    @HandleAfterCreate
    public void handleAuthorAfterCreate(Author author){
        logger.info("Inside Author After Create ....");
        String name = author.getName();
    }

    @HandleBeforeDelete
    public void handleAuthorBeforeDelete(Author author){
        logger.info("Inside Author Before Delete ....");
        String name = author.getName();
    }

    @HandleAfterDelete
    public void handleAuthorAfterDelete(Author author){
        logger.info("Inside Author After Delete ....");
        String name = author.getName();
    }
}

Hier werden verschiedene Methoden der KlasseAuthorEventHandlerbasierend auf der Operation aufgerufen, die für die EntitätAuthorausgeführt wird.

Beim Auffinden der Klasse mit der Annotation@RepositoryEventHandlerdurchläuft Spring die Methoden in der Klasse, um Annotationen zu finden, die den unten genannten Vorher- und Nachher-Ereignissen entsprechen:

Before* Event Annotations – , die zugeordnet sind, bevor Annotationen aufgerufen werden, bevor das Ereignis aufgerufen wird.

  • BeforeCreateEvent

  • BeforeDeleteEvent

  • BeforeSaveEvent

  • BeforeLinkSaveEvent

After* Event Annotations – , die mit After Annotations verknüpft sind, werden nach dem Aufruf des Ereignisses aufgerufen.

  • AfterLinkSaveEvent

  • AfterSaveEvent

  • AfterCreateEvent

  • AfterDeleteEvent

Wir können auch Methoden mit verschiedenen Entitätstypen deklarieren, die demselben Ereignistyp in einer Klasse entsprechen:

@RepositoryEventHandler
public class BookEventHandler {

    @HandleBeforeCreate
    public void handleBookBeforeCreate(Book book){
        // code for before create book event
    }

    @HandleBeforeCreate
    public void handleAuthorBeforeCreate(Author author){
        // code for before create author event
    }
}

Hier befasst sich dieBookEventHandler -Skala mit mehr als einer Entität. Beim Auffinden der Klasse mit@RepositoryEventHandler -Sannotation durchläuft sie die Methoden und ruft die jeweilige Entität vor dem jeweiligen Erstellungsereignis auf.

Außerdem müssen wir die Ereignishandler in der Klasse@Configurationdeklarieren, die die Bean auf Handler untersuchen und sie mit den richtigen Ereignissen abgleichen:

@Configuration
public class RepositoryConfiguration{

    public RepositoryConfiguration(){
        super();
    }

    @Bean
    AuthorEventHandler authorEventHandler() {
        return new AuthorEventHandler();
    }

    @Bean
    BookEventHandler bookEventHandler(){
        return new BookEventHandler();
    }
}

3. Fazit

Zusammenfassend dient dies als Einführung in die Implementierung und das Verständnis von@RepositoryEventHandler.

In diesem kurzen Tutorial haben wir gelernt, wie die Annotation von@RepositoryEventHandlerimplementiert wird, um verschiedene Ereignisse zu behandeln, die dem Entitätstyp entsprechen.

Und wie immer finden Sie die vollständigen Codebeispieleover on Github.