でドキュメントを保存する際に、Spring の側面を使用して追加のデータを保存しようとしていますMongoRepository。ターゲットは次のインターフェイスです。
@InSearch
public interface ItemRepository extends MongoRepository<Item, Long>,
ItemRepositoryCustom
{
List<Item> findAllByUsername( String username );
List<Item> findAllBySessionId( Long sessionId );
}
このポイントカットを使用すると:
@Pointcut( "execution(* save(..)) && " +
"target(org.springframework.data.mongodb.repository.MongoRepository)" )
private void saveEntity()
{}
このメソッドは、openメソッドが呼び出される前に正常に実行されます。
@Before( "saveEntity() && args(entity)" )
public void beforeSavingEntity( JoinPoint jp, AuditedBean entity )
{ ... }
しかし、注釈が付けられたインターフェースでのみ実行したい@InSearchので、そのようにポイントカットを定義しようとしました:
@Pointcut( "execution(* save(..)) && " +
"target(org.springframework.data.mongodb.repository.MongoRepository) && " +
"@target(xx.annotations.InSearch)" )
private void saveEntity()
{}
注釈の定義:
@Target( { ElementType.TYPE} )
@Retention(RetentionPolicy.RUNTIME)
public @interface InSearch
{}
このポイントカットでは、メソッドbeforeSavingEntityは呼び出されません。ログにエラーはありません。@targetについてのドキュメンテーションと との違いを理解できたかどうかはわかりません@within。私も試してみましたが@within、どちらもうまくいきませんでした。
拡張し、注釈が付けられsaveたインターフェイスを実装するクラスでメソッドの実行を選択するには、このポイントカットをどのように定義する必要がありますか?MongoRepository@InSearch
ありがとうございました!