public abstract class AService<T> {
public T needsToBeAdvised(T param) {
T result = doSomething(param);
return result;
}
}
@Service
public class BService extends AService<B> {
@Override
public T needsToBeAdvised(T param) {
return super.needsToBeAdvised(param);
}
}
@Service
public class CService extends AService<C> {}
// (B & C implement an interface AType)
@Component
@Aspect
public class MyAspect {
@Pointcut("execution(* package.AService+.needsToBeAdvised(*))")
private void aNeedToBeAdvised() {}
@AfterReturning(pointcut="aNeedToBeAdvised()", returning="param")
public void interceptNeedsToBeAdvised(JoinPoint joinPoint, AType param) {
// some action
}
}
dieses Setup Gegeben:Frühling AOP - raten Super-Klasse-Methode nicht in Unterklasse überschrieben
bService.needsToBeAdvised(bParam) //is intercepted
aber
cService.needsToBeAdvised(cParam) //is NOT.
Wie erreiche ich diese ohne zwingende needsToBeAdvised()
in CService
?
EDIT:
Ich sollte hinzufügen, dass BService
und CService
beide sind im gleichen Paket.
Wenn ich mein Punkt-Schnitt wie folgt ändern: Sind alle Dienste im selben Paket
@Pointcut("execution(* package.CService.needsToBeAdvised(*))")
cService.needsToBeAdvised(cParam) //is still not intercepted
Der einzige Weg, es funktioniert, wenn ich needsTobeAdvised()
in CService
Vielen Dank für Ihre Antwort hinzufügen. Sie sind im selben Paket. Siehe oben Bearbeiten. – mantithetical