1. 序章

エンティティを操作している間、RESTエクスポータはイベントの作成、保存、および削除の操作を処理します。 ApplicationListenerを使用して、これらのイベントをリッスンし、特定のアクションが実行されたときに関数を実行できます。

または、ドメインタイプに基づいてイベントをフィルタリングする注釈付きハンドラーを使用することもできます。

2. 注釈付きハンドラーの作成

ApplicationListener は、エンティティタイプを区別しません。 ただし、アノテーション付きハンドラーを使用すると、ドメインタイプに基づいてイベントをフィルタリングできます。

POJOに@RepositoryEventHandlerアノテーションを追加することで、アノテーションベースのイベントハンドラーを宣言できます。 その結果、これは BeanPostProcessor に、POJOでハンドラーメソッドを検査する必要があることを通知します。

以下の例では、エンティティ Author –に対応するRepositoryEventHandler でクラスに注釈を付け、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 *イベント注釈–イベントが呼び出される前に注釈が呼び出される前に関連付けられた

  • BeforeCreateEvent
  • BeforeDeleteEvent
  • BeforeSaveEvent
  • BeforeLinkSaveEvent

After *イベント注釈– 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 アノテーションを使用してクラスを見つけると、メソッドを繰り返し処理し、それぞれのcreateイベントの前にそれぞれのエンティティを呼び出します。

また、 @Configuration クラスでイベントハンドラーを宣言する必要があります。これにより、Beanのハンドラーが検査され、適切なイベントと照合されます。

@Configuration
public class RepositoryConfiguration{
    
    public RepositoryConfiguration(){
        super();
    }

    @Bean
    AuthorEventHandler authorEventHandler() {
        return new AuthorEventHandler();
    }

    @Bean
    BookEventHandler bookEventHandler(){
        return new BookEventHandler();
    }
}

3. 結論

結論として、これは実装と理解の概要として役立ちます @RepositoryEventHandler。

このクイックチュートリアルでは、 @RepositoryEventHandler アノテーションを実装して、エンティティタイプに対応するさまざまなイベントを処理する方法を学びました。

そして、いつものように、Githubで完全なコードサンプルを見つけてください。