1. 引言
當與實體交互時,REST 導出器處理創建、保存和刪除事件等操作。我們可以使用 ApplicationListener 來監聽這些事件並在特定操作執行一個函數。
或者,我們可以使用註解處理器,根據領域類型過濾事件。
2. 編寫帶有註釋的處理器
`ApplicationListener 不區分實體類型;但 通過添加註釋處理器,我們可以根據領域類型過濾事件。
我們可以通過在 POJO 上添加 <em>@RepositoryEventHandler</em> 註解來聲明基於註解的事件處理器。這會告知 <em>BeanPostProcessor</em> 需要檢查該 POJO 中的處理器方法。
在下面的示例中,我們使用 <em>RepositoryEventHandler</em> 註解對類進行標註,對應實體 <em>Author</em>,並在 <em>AuthorEventHandler</em> 類中聲明與不同前置和後置事件相關的各種方法:
@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會遍歷該類中的方法,以查找與以下“前置”和“後置”事件相對應的註解:
- BeforeCreateEvent
- BeforeDeleteEvent
- BeforeSaveEvent
- BeforeLinkSaveEvent
- 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註解來處理與實體類型相關的各種事件。