Wie kann ein JPA-Repository (Spring Data) instrumentiert / beraten werden?

Ich bemühe mich nicht, ein jpa-Repository für Frühjahrsdaten zu erstellen. Ziel ist es, alle Nichtvoid public-Methoden in einem bestimmten Repository, die mit einer benutzerdefinierten Anmerkung (in diesem Beispiel ResourceNotFound) versehen sind, und Auslösen einer Ausnahme, wenn der Rückgabewert entweder @ inull oder eine leere Sammlung.

@Repository 
@ResourceNotFound
@Transactional(readOnly = true)
public interface CityRepository extends JpaRepository<City, Long>, JpaSpecificationExecutor<City> { … }

Der folgende Rat ist, alle öffentlichen Methoden der Implementierungen der Schnittstelle mit @ zu verbinde@ResourceNotFound.

@Pointcut("within(com.digitalmisfits.spring.aop.annotation.ResourceNotFound *)")
public void beanAnnotatedWithResourceNotFound() {}

@Pointcut("execution(public * *(..))")
public void publicMethod() {}

@Around("beanAnnotatedWithResourceNotFound() && publicMethod()")
public Object publicMethodInsideAClassMarkedWithResourceNotFound(ProceedingJoinPoint pjp) throws Throwable {

    System.out.println("publicMethodInsideAClassMarkedWithResourceNotFound " + pjp.getTarget().toString());;

    Object retVal =  pjp.proceed();

    if(((MethodSignature) pjp.getSignature()).getReturnType() != Void.TYPE && isObjectEmpty(retVal))
        throw new RuntimeException("isObjectEmpty == true");

    return retVal;
}

DaspublicMethodInsideAClassMarkedWithResourceNotFound(…) -Methode funktioniert, wenn der Pointcut wie folgt angegeben ist:

@Pointcut("execution(public * package.CityRepository+.*(..))")

Allerdings ist die@ResourceNotFound Annotation wird nicht abgeholt. Dies kann daran liegen, dass die zugrunde liegende Klasse der Repository-Schnittstelle ein (Proxy-) @ isSimpleJpaRepository, die diese bestimmte Anmerkung nicht hat.

Gibt es eine Möglichkeit, @ResourceNotFound an die Implementierung weiterzugeben?

- update -

Die Frage wurde geändert, um die Tatsache widerzuspiegeln, dass der Hinweis (um) nur für Repositorys mit einer benutzerdefinierten Anmerkung gelten sollte.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage