@RepositoryEventHandlerを使用したSpring Data RESTイベント

@RepositoryEventHandlerを使用したSpring Data RESTイベント

1. 前書き

エンティティの操作中、RESTエクスポーターはイベントの作成、保存、削除の操作を処理します。 We can use an ApplicationListener to listen to these events and execute a function when the particular action is performed.

または、use annotated handler which filters events based on domain type.

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

ApplicationListenerは、エンティティタイプを区別しません。ただし、with the annotated handler, we can filter events based on domain type

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

以下の例では、エンティティAuthor – に対応するRepositoryEventHandlerでクラスに注釈を付け、AuthorEventHandlerクラスのAuthorエンティティに対応するさまざまな前後のイベントに関連するメソッドを宣言します。 :

@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();
    }
}

ここでは、Authorエンティティで実行された操作に基づいて、AuthorEventHandlerクラスのさまざまなメソッドが呼び出されます。

@RepositoryEventHandlerアノテーションを持つクラスを見つけると、Springはクラス内のメソッドを反復処理して、以下で説明する前後のイベントに対応するアノテーションを見つけます。

イベントが呼び出される前に、beforeアノテーションに関連付けられたBefore* Event Annotations – が呼び出されます。

  • BeforeCreateEvent

  • BeforeDeleteEvent

  • BeforeSaveEvent

  • BeforeLinkSaveEvent

アフターアノテーションに関連付けられたAfter* Event Annotations – は、イベントが呼び出された後に呼び出されます。

  • 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 classは複数のエンティティを扱います。 @RepositoryEventHandler annotationでクラスを見つけると、メソッドを反復処理し、それぞれの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アノテーションを実装する方法を学びました。

そして、いつものように、完全なコードサンプルover on Githubを見つけます。