In meiner Spring 4 Anwendung habe ich eine Klasse wie folgt:Spring: Interception ohne AspectJ
class Address {
public getAdress(){
...
List<Town> towns = getTowns();
...
}
@CustomAnnotation
private List<Town> getTowns(){
}
}
Mit AspectJ kann ich leicht abfangen der getAdress()
Anruf. Das Problem ist mit getTowns()
, die nicht abgefangen wird.
Es gibt Lösungen wie Load-Time Weben, aber das ist schwierig zu tunen und ich nicht was meine Anwendung neu zu konfigurieren.
Wie kann ich jeden Anruf erfassen, der mit einer Methode gemacht wurde, die mit CustomAnnotation
ohne AspectJ kommentiert wurde?
Grüße
PS: Ich weiß, dass there is a workaround with self-reference aber ich es „sauber“ sehr nicht finden.
Extrahieren Sie eine Schnittstelle mit 'getAdress', und erstellen Sie einen Proxy mit [ProxyFactoryBean] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/aop/framework/ProxyFactoryBean.html). Dann benutze den Proxy anstelle der Bean – Eugene
@Eugene Danke für deinen Kommentar. Könnten Sie bitte Ihre Idee durch einen Code veranschaulichen? Ist Ihre Methode "XML-frei", weil meine App keine XML-Konfigurationsdatei hat und ich XML so weit wie möglich vermeiden möchte. – Dinlike
Sie können einfach nicht das ist die Beschränkung der Proxy-basierte AOP, die einzige Problemumgehung ist Selbstaufruf, die Sie nicht wollen (was im Grunde die einzige Lösung ist). Abgesehen von Ladezeit oder Kompilierzeit gibt es keine anderen Lösungen. –