1. 引言
在與實體交互時,REST 導出器處理創建、保存和刪除事件的操作。 我們可以使用 ApplicationListener 來監聽這些事件並在特定操作執行一個函數。
或者,我們可以 使用帶有註解的處理器,根據領域類型過濾事件。
2. 編寫帶有註釋的處理器
ApplicationListener 不區分實體類型;但是,通過帶有註釋的處理器,我們可以根據域類型過濾事件。
我們可以通過在 POJO 上添加@RepositoryEventHandler註解來聲明基於註解的事件處理器。這通知BeanPostProcessor需要檢查 POJO 以查找處理器方法。
在下面的示例中,我們使用RepositoryEventHandler註解對類進行標註,對應實體Author,並聲明與Author實體相關的不同before和after事件對應的方法,在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和after事件相關的註解:
Before*事件註解 – 與before註解相關的在事件被調用之前調用。
- BeforeCreateEvent
- BeforeDeleteEvent
- BeforeSaveEvent
- BeforeLinkSaveEvent
After*事件註解 – 與after註解相關的在事件被調用之後調用。
- AfterLinkSaveEvent
- AfterSaveEvent
- AfterCreateEvent
- AfterDeleteEvent
我們可以在一個類中聲明具有不同實體類型,對應相同事件類型的不同方法:
@RepositoryEventHandler
public class BookEventHandler {
@HandleBeforeCreate
public void handleBookBeforeCreate(Book book){
// book的before create事件代碼
}
@HandleBeforeCreate
public void handleAuthorBeforeCreate(Author author){
// author的before create事件代碼
}
}
在此,BookEventHandler類處理多個實體。在找到帶有@RepositoryEventHandler註解的類時,它會遍歷方法並調用正確的實體在相應的創建事件之前。
此外,我們需要在@Configuration類中聲明事件處理器,該類會檢查豆子以查找處理器並將其與正確的事件匹配:
@Configuration
public class RepositoryConfiguration{
public RepositoryConfiguration(){
super();
}
@Bean
AuthorEventHandler authorEventHandler() {
return new AuthorEventHandler();
}
@Bean
BookEventHandler bookEventHandler(){
return new BookEventHandler();
}
}
3. 結論
綜上所述,這作為實施和理解@RepositoryEventHandler的介紹。
在本快速教程中,我們學習瞭如何使用@RepositoryEventHandler註解來處理與實體類型相關的各種事件。