Pointcut für annotierte Methoden oder Methoden in annotierten Klassen

Ich brauche Ein Punkteschnitt für Methoden in Klassen, die mit @X oder mit @X @ kommentierten Methoden versehen sin. Ich auchneed das Anmerkungsobjekt. Wenn sowohl die Klasse als auch die Methode mit @ beschriftet siIch ziehe es vor, die Annotation der Methode als Argument zu erhalten.

Ich habe Folgendes versucht, wodurch eine "inkonsistente Bindung" -Warnung erzeugt wird. (Warum sie nicht einfach auf null setzen?)

@Around("@annotation(methodLevelX) || @within(classLevelX)")
public Object advise(ProceedingJoinPoint pjp, X methodLevelX, X classLevelX)

Das Folgende erzeugt eine "mehrdeutige Bindung von Parameter (n) x über '||' in pointcut "warnung. (Was meiner Meinung nach nicht unbedingt Sinn macht: Warum nicht die erste kurzgeschlossene Bewertung binden?)

@Around("@annotation(x) || @within(x)")
public Object advise(ProceedingJoinPoint pjp, X x)

Das Teilen des vorherigen Versuchs in zwei führt natürlich zu zwei Methodenaufrufen, wenn Klassen- und Methodenanmerkungen vorhanden sind.

Ich weiß, ich könnte einfach die Methode und Klasse mit Reflektion und meiner gewünschten Anmerkung mit einem Punktschnitt wie diesem erhalten:

@Around("@annotation(com.package.X) || @within(com.package.X)")

Aber ich würde es vorziehen, nicht zu.

Gibt es eine "One Pointcut, eine Methode, ein Annotation-Argument", eine Lösung für meine Anforderung, die keine Reflektion erfordert?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage