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

データ]

  • リンク:/tag/spring-data-rest/[春のデータREST]

1.はじめに

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

あるいは、ドメインタイプに基づいてイベントをフィルタ処理するアノテーション付きハンドラを使用することもできます。

2.注釈付きハンドラを書く

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

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

以下の例では、エンティティに対応する RepositoryEventHandler でクラスにアノテーションを付けています。

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

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

@ RepositoryEventHandler アノテーションを使用してクラスを見つけると、Springはクラス内のメソッドを繰り返し処理して、後述の前後のイベントに対応するアノテーションを見つけます。

  • Before Event Annotations - イベントが呼び出される前にbefore注釈が呼び出される前に関連付けられています。

  • 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.まとめ

結論として、これは[email protected]を実装し理解するための入門書として役立ちます。

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

そして、いつものように、完全なコードサンプルhttps://github.com/eugenp/tutorials/tree/master/spring-data-rest[over on Github]を見つけてください。