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

События REST данных Spring с @RepositoryEventHandler

1. Вступление

При работе с сущностью экспортер REST обрабатывает операции по созданию, сохранению и удалению событий. We can use an ApplicationListener to listen to these events and execute a function when the particular action is performed.с

В качестве альтернативы мы можемuse annotated handler which filters events based on domain type.

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

ApplicationListener не различает типы сущностей; ноwith the annotated handler, we can filter events based on domain type.

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

В приведенном ниже примере мы аннотируем класс с помощьюRepositoryEventHandler, соответствующего объектуAuthor – , и объявляем методы, относящиеся к различным событиям до и после, соответствующим объектуAuthor в классеAuthorEventHandler :

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

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

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

Before* Event Annotations – associated с до вызова аннотаций перед вызовом события.

  • BeforeCreateEvent

  • BeforeDeleteEvent

  • BeforeSaveEvent

  • BeforeLinkSaveEvent

After* Event Annotations – associated с after, аннотации вызываются после вызова события.

  • AfterLinkSaveEvent

  • AfterSaveEvent

  • AfterCreateEvent

  • AfterDeleteEvent

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

@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, который будет проверять bean-компонент на наличие обработчиков и сопоставлять их с нужными событиями:

@Configuration
public class RepositoryConfiguration{

    public RepositoryConfiguration(){
        super();
    }

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

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

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

В заключение, это служит введением в реализацию и понимание@RepositoryEventHandler.

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

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