나는 MongoRepository
과 함께 문서를 저장하는 동안 데이터를 저장하기 위해 Spring aspect를 사용하려고한다.@target이있는 정의 된 pointcut이 작동하지 않는 이유는 무엇입니까?
@Before("saveEntity() && args(entity)")
public void beforeSavingEntity(JoinPoint jp, AuditedBean entity)
{ ... }
하지만 그것은 단지 실행하려면 :
@Pointcut("execution(* save(..)) && " +
"target(org.springframework.data.mongodb.repository.MongoRepository)")
private void saveEntity()
{}
이 방법은 open
메서드를 호출하기 전에 확인을 실행 :이 포인트 컷을 사용하면
@InSearch
public interface ItemRepository extends MongoRepository<Item, Long>,
ItemRepositoryCustom
{
List<Item> findAllByUsername(String username);
List<Item> findAllBySessionId(Long sessionId);
}
: 대상이 인터페이스
:@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
도 시도해 보았지만 작동하지 않았다.
어떻게 MongoRepository
를 확장하고 @InSearch
와 주석이 인터페이스를 구현하는 클래스에 save
방법의 실행을 선택하려면이 포인트 컷을 정의해야합니다?
감사합니다.
개인 액세스 수정 자에 대한 확신이 있으십니까? 나는 정확하게 기억하지 못한다 :) 또한 런타임에'@ InSearch'가 유지됩니까? –
예, 확실합니다. 첫번째 것은 그것으로 작동합니다. 인터페이스 정의에 기반을 둔 - "MongoDB를 봄 문서" – francadaval
예에 의해'InSearh' 정의 – francadaval