Eventos REST de dados da primavera com @RepositoryEventHandler

Eventos REST de dados da primavera com @RepositoryEventHandler

1. Introdução

Enquanto trabalhava com uma entidade, o exportador REST manipula operações para criar, salvar e excluir eventos. We can use an ApplicationListener to listen to these events and execute a function when the particular action is performed.

Alternativamente, podemosuse annotated handler which filters events based on domain type.

2. Escrevendo um manipulador anotado

OApplicationListener não distingue entre os tipos de entidade; maswith the annotated handler, we can filter events based on domain type.

Podemos declarar um manipulador de eventos baseado em anotação adicionando a anotação@RepositoryEventHandler em um POJO. Como resultado, isso informa aoBeanPostProcessor que o POJO precisa ser inspecionado para métodos de tratamento.

No exemplo abaixo, anotamos a classe comRepositoryEventHandler correspondendo à entidadeAuthor – e métodos de declaração pertencentes a diferentes eventos antes e depois que correspondem à entidadeAuthor na classeAuthorEventHandler :

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

Aqui, diferentes métodos da classeAuthorEventHandler serão chamados com base na operação realizada na entidadeAuthor.

Ao encontrar a classe com a anotação@RepositoryEventHandler, o Spring itera sobre os métodos na classe para encontrar anotações correspondentes aos eventos antes e depois mencionados abaixo:

Before* Event Annotations – associado a antes que as anotações sejam chamadas antes que o evento seja chamado.

  • BeforeCreateEvent

  • BeforeDeleteEvent

  • BeforeSaveEvent

  • BeforeLinkSaveEvent

After* Event Annotations – associado a depois que as anotações são chamadas depois que o evento é chamado.

  • AfterLinkSaveEvent

  • AfterSaveEvent

  • AfterCreateEvent

  • AfterDeleteEvent

Também podemos declarar métodos com diferentes tipos de entidades correspondentes ao mesmo tipo de evento em uma classe:

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

Aqui, o sclassBookEventHandler lida com mais de uma entidade. Ao encontrar a classe com@RepositoryEventHandler annotation, itera sobre os métodos e chama a respectiva entidade antes do respectivo evento de criação.

Além disso, precisamos declarar os manipuladores de eventos na classe@Configuration que inspecionará o bean em busca de manipuladores e os combinará com os eventos corretos:

@Configuration
public class RepositoryConfiguration{

    public RepositoryConfiguration(){
        super();
    }

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

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

3. Conclusão

Em conclusão, isso serve como uma introdução à implementação e compreensão de@RepositoryEventHandler.

Neste tutorial rápido, aprendemos como implementar a anotação@RepositoryEventHandler para lidar com vários eventos correspondentes ao tipo de entidade.

E, como sempre, encontre as amostras de código completasover on Github.