0
우리는 CRUD 작업을 수행 할 많은 엔티티가있는 프로젝트를 수행하고 있습니다. 나는 기본 엔티티 클래스를 만들고 다른 모든 엔티티에서 created_date, created_by, last_updated_date, last_updated_by 등의 공통 필드를 갖는 기본 엔티티 클래스를 확장했습니다. 이제 Spring CrudRepository 메소드에 aspect를 구현하고 위를 설정합니다. 절약하면서 언급 된 필드.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;
}
}
우리는 먼저이 포인트 컷 처리하는 방법을 만들고, (방법을 '저장'에 대한 귀하의 경우) 필터 식으로 포인트 컷 방법을 정의해야 측면에서 작동하도록
그것은이다 실제로 aspect만을 볼 수 있기 때문에, 당신이 무엇을 잘못했는지 알기는 어렵지만, 실제 코드 (패키지 이름, 클래스 및 메소드 선언)는 대상이 아닙니다. 또 다른 질문은 Spring AOP가 올바르게 설정되었는지, 즉 AOP가 올바르게 작동하는지 여부입니다. 실행 (* * (..))과 단순한'@ Before' advice 나 결과를 리턴하는 간단한'@ Around' advice와 같은 단순한 pointcut을 위해, 다른 것은 없습니까? – kriegaex
도움을 주시면 답변을 수락하시는 것을 잊지 마십시오. – Cepr0