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.