Spring Data REST 事件與 @RepositoryEventHandler

REST,Spring Data
Remote
0
11:14 AM · Dec 01 ,2025

1. 引言

在與實體交互時,REST 導出器處理創建、保存和刪除事件的操作。 我們可以使用 ApplicationListener 來監聽這些事件並在特定操作執行一個函數。

或者,我們可以 使用帶有註解的處理器,根據領域類型過濾事件。

2. 編寫帶有註釋的處理器

ApplicationListener 不區分實體類型;但是,通過帶有註釋的處理器,我們可以根據域類型過濾事件

我們可以通過在 POJO 上添加@RepositoryEventHandler註解來聲明基於註解的事件處理器。這通知BeanPostProcessor需要檢查 POJO 以查找處理器方法。

在下面的示例中,我們使用RepositoryEventHandler註解對類進行標註,對應實體Author,並聲明與Author實體相關的不同beforeafter事件對應的方法,在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會遍歷類中的方法,以查找與beforeafter事件相關的註解:

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註解來處理與實體類型相關的各種事件。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.