2009-07-15 4 views
2

Ich benutze Spring Framework (2.5) und es ist AOP-Funktionen. Ich habe einen pointcut Ausdruck, wiePointcut funktioniert nicht für generische Schnittstelle

@Pointcut("execution(public * org.springframework.batch.item.ItemReader+.read(..))") 
public void itemReaderMethods() {} 

Wo die ItemReader interface eine Feder Schnittstelle und es ist Signatur ist:

org.springframework.batch.item.ItemReader<T> 

Die Schnittstelle eine Methode als ‚gelesen‘ genannt hat, für die ich anwenden möchten die Beratung: die Methodensignatur ist:

org.springframework.batch.item.ItemReader.read() 

Aber, wenn ich meine Anwendung mit dem oben pointcut Ausdruck laufen, ich bin die unten Ausnahme bekommen:

java.lang.IllegalArgumentException: keine Übereinstimmung für diese Art Name Warnung: org.springframework.batch.item.ItemReader [Xlint: invalidAbsoluteTypeName]

Meine Vermutung ist, dass, da ItemReader eine generische Schnittstelle ist, die pointcut passt nicht richtig zusammen. Wenn das der Fall ist, wie kann ich meinen Pointcut-Ausdruck so schreiben, dass er auch den generischen Interfaces entspricht?

+0

Das ist nicht der Fall. Aufgrund des Typs löscht es nicht auf generische Argumente. – cletus

Antwort

1

Generics scheinen nicht ein Problem für mich zu sein - ich einen Test pointcut auf der Karte Operationen erstellen:

@Around(value="execution(* java.util.Map.size(..))") 

Ich brauche nicht zu verwenden Karte + entweder (Ich gehe davon aus, dass liegt daran, dass wir Schnittstellen verwenden), und die generische Art von Map spielte ebenfalls keine Rolle.

Sind Sie sicher, dass die ItemReader-Schnittstellenklasse verfügbar ist und Sie Implementierungen verfügbar haben? Das ist, was die Fehlermeldung vorschlägt (und was ich bekommen kann, wenn ich einen Dummy-Klassennamen in meinen Test-Pointcut einfüge). Vielleicht versuchen, protokollieren/Drucken

und ähnlich für Ihre erwartete Implementierung Klasse?

Verwandte Themen