知識庫 / Spring / Spring Data RSS 訂閱

Spring Data REST 中的 @RepositoryEventHandler 事件

REST,Spring Data
HongKong
10
03:53 AM · Dec 06 ,2025

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

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

發佈 評論

Some HTML is okay.