2017-12-30 2 views
-1

gemacht Ich möchte alle Anrufe zu einem bestimmten Objekt gemacht abfangen: org.springframework.data.redis.core.StringRedisTemplace (zB save();delete();), aber nur dann, wenn die Anrufe direkt aus gemacht eine meiner Corporation viele Pakete com.mycompany.*, nicht, wenn eine Instanz von StringRedisTemplace von einer Drittanbieter-Bibliothek oder Feder/Daten/Redis selbst verwendet wird.AOP, wie Anrufe zu einer bestimmten Klasse abzufangen nur, wenn sie direkt aus einem Paket X

Gibt es eine Möglichkeit, dies mit AOP-Annotationen wie @Pointcut@Around usw. zu tun. Meine Suchen/Versuche waren nicht erfolgreich.

Also in einem Wort => wie alle Aufrufe an alle Instanzen einer bestimmten Klasse abzufangen/instrumentieren, solange diese Instanzen instanziiert und innerhalb meiner Firmenpakete verwendet wurden.

+0

ich eine Glocke zu hören, aber man weiß nicht (weiß nicht), wo es ist –

Antwort

1

Nun, Sie sagen es fast von selbst:

aber nur, wenn die Anrufe direkt von innerhalb einer meiner Korporation viele Pakete gemacht com.mycompany.*

Der pointcut Typ Sie brauchen heißt in der Tat within. Es gibt eine verwandte withincode in voller AspectJ, aber Proxy-basierte Spring AOP unterstützt nur die erstere, nicht die letztere. Für Letzteres müssten Sie volles AspectJ über LTW aus Spring heraus verwenden. Alles wird in der Frühlingsanleitung AOP chapter erklärt.

Was Sie tun möchten, ist so etwas wie dieses:

within(com.mycompany..*) && call(org.springframework.data.redis.core.StringRedisTemplate+.*(..)) 
Verwandte Themen