0
私はCRUD操作を行うエンティティがたくさんあるプロジェクトをやっています。私はベースエンティティクラスを作成し、他のすべてのエンティティでは、created_date、created_by、last_updated_date、last_updated_byなどの共通フィールドを持つ基本エンティティクラスを拡張しました。今、Spring CrudRepositoryメソッドのアスペクトを実装したいと思います節約しながら上記のフィールド。Aspect on Spring crudリポジトリメソッドを実装する方法
私はこのようなものを実装しようとしましたが、動作しませんでした。私たちが最初にこのポイントカットを処理するメソッドを作成し、その後、(メソッドを「保存」のご使用の場合)、フィルタの式にポイントカット方法を定義する必要があり様相で動作するように
package com.cerium.aop;
import java.util.Date;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.cerium.datamodel.AccountDataModel;
import com.cerium.domain.Account;
import com.cerium.domain.BaseEntity;
import com.cerium.util.Constants;
/**
* @author Manikanta B Cerium
*
*/
@Component
@Aspect
public class SampleAspect {
private static final Logger LOG = LoggerFactory.getLogger(SampleAspect.class);
@Around("execution(* com.cerium.repository.*.save (com.cerium.domain.BaseEntity)) && args(saveData)")
public Object beforeSave(ProceedingJoinPoint proceedingJoinPoint, Object saveData) throws Throwable {
LOG.debug("Into aspect before save: {}", saveData);
BaseEntity baseEntity = (BaseEntity) proceedingJoinPoint.proceed(new Object[] { saveData });
// set the fields here......
baseEntity.setCreatedDate(new Date());
System.out.println(saveData);
return baseEntity;
}
}
ことがありますアスペクトだけが表示されるため、実際のコード(パッケージ名、クラス、およびメソッドの宣言)は対象ではないため、何が問題になっているのか分かりません。別の問題は、Spring AOPが正しく設定されているかどうかです。 '実行(* *(..))'やシンプルな '@ Before'アドバイス、あるいは単に結果を返すだけの単純な' @ Around'アドバイスのような単純なポイントカットでは何もありません。 – kriegaex
それがあなたを助けたら答えを受け入れることを忘れないでください... – Cepr0