События 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.