Рубрики
Без рубрики

Spring Data REST События с @RepositoryEventHandler

Узнайте, как обрабатывать события сущности в Spring Data REST.

Автор оригинала: baeldung.

Spring Data REST События с @RepositoryEventHandler

1. Введение

Работая с организацией, экспортер REST обрабатывает операции по созданию, сохранению и удалению событий. Мы можем использовать ПриложениеЛистенер слушать эти события и выполнять функцию при выполнении конкретного действия.

Кроме того, мы можем использовать аннотированный обработчик, который фильтрует события в зависимости от типа домена.

2. Написание аннотированного обработчика

ПриложениеЛистенер не проводит различия между типами сущностей; но с аннотированным обработчиком мы можем фильтровать события на основе типа домена .

Мы можем объявить обработчик событий на основе аннотации, добавив @RepositoryEventHandler аннотация на POJO. Об этом сообщает пресс-служба BeanPostПроцессор что POJO необходимо проверить на методы обработчика.

В приведенной ниже примере мы аннотировать класс с РепозиторийEventHandler соответствующие сущности Автор – и объявить методы, относящиеся к различным до и после событий, соответствующих Автор сущность в АвторEventHandler класс:

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

Здесь разные методы АвторEventHandler класс будет вызываться на основе операции, выполненной на Автор сущность.

О поиске класса с @RepositoryEventHandler аннотация, Весна итерирует над методами в классе, чтобы найти аннотации, соответствующие до и после событий, упомянутых ниже:

До Аннотации событий – связанные с до того, как будут вызваны аннотации до того, как событие будет названо.

  • ДоСоздаемогоВеньше
  • ДоДелетевента
  • ПередSaveEvent
  • ПередLinkSaveEvent

После Аннотации событий – связанные с после аннотации называются после того, как событие называется.

  • AfterLinksaveevent
  • AfterSaveEvent
  • ПослеСоздайвента
  • Последелетивента

Мы также можем объявить методы с различным типом сущности, соответствующие одному и тому же типу событий в классе:

@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
    }
}

Вот, BookEventHandler класс имеет дело с более чем одной сущностью. О поиске класса с @RepositoryEventHandler аннотация, она итерирует над методами и вызывает соответственно сущность перед соответственно событием создания.

Кроме того, мы должны объявить обработчики событий в @Configuration класс, который будет проверять фасоль для обработчиков и соответствует им с правильными событиями:

@Configuration
public class RepositoryConfiguration{
    
    public RepositoryConfiguration(){
        super();
    }

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

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

3. Заключение

В заключение я хотел бы сказать, что это служит введением в осуществление и @RepositoryEventHandler.

В этом быстром учебнике мы узнали, как реализовать @RepositoryEventHandler аннотация для обработки различных событий, соответствующих типу сущности.

И, как всегда, найти полные образцы кода более на Github .