2010-02-15 5 views
18

J'ai des problèmes avec une définition de point de coupe dans Spring (version 2.5.6). J'essaie d'intercepter tous les appels de méthode à une classe, sauf pour une méthode donnée (someMethod dans l'exemple ci-dessous). Cependant, l'intercepteur est également appelé pour someMethod.Syntaxe AOP Pointcut de printemps pour AND, OR et NOT

Alors j'ai essayé ceci:

<aop:config> 
    <aop:advisor 
     pointcut="execution(* x.y.z.ClassName.(* AND NOT someMethod)(..)))" 
    /> 
</aop:config> 

Mais cela ne compile pas car il n'est pas une syntaxe valide (je reçois un BeanCreationException).

Quelqu'un peut-il donner des conseils?

+0

Avez-vous envisagé d'écrire la logique d'aspect avec le style @AspectJ à la place? C'est beaucoup plus simple et plus puissant d'écrire la logique d'aspect avec Java. Surtout si vous utilisez Eclipse avec le plugin AJDT. – Espen

Répondre

18

je sais qu'il ya probablement un peu en retard à ce stade, mais ive ayant la même question et je résolus par échapper aux caractères esperluette donc son &amp;&amp; ! au lieu de ' ET NON 'ou' & &! '. Je fais cela dans le fichier xml

<aop:config> 
    <aop:pointcut id="blah" expression="execution(* com.disney.goofy..*.*(..)) &amp;&amp; [email protected](com.disney.goofy.NonDisneyCharacter)"/> 
    <aop:advisor advice-ref="transAdvice" pointcut-ref="blah"/> 
</aop:config> 

Cela applique les conseils à toutes les méthodes à com.disney.goofy et exécutées qui ne sont pas annotés avec NonDisneyCharacter

4

Cela devrait fonctionner (spring AOP reference):

pointcut="execution(* x.y.z.ClassName.*(..)) 
      && !execution(* x.y.x.ClassName.someMethod(..))" 
+2

Ça ne marche pas j'ai peur.Notez que la référence Spring indique &&> AND et! > Pas dans les fichiers XML. Merci pour le pourboire de toute façon :) – Odinodin

1

J'utilise aussi le printemps 2.5. 6 et avait un problème similaire avec ou ne fonctionne pas, mais etétait de travail. Il s'avère que ou (en minuscules) fonctionne, donc il y a clairement un bug dans ce code.

Il est intéressant de noter que la bonne syntaxe AspectJ est & &, ||, et !, mais la syntaxe et/ou/pas a été ajoutée par le printemps pour faciliter le travail dans le XML. A partir du manuel:

En combinant pointcut sous-expressions, « & & » est maladroit dans un document XML, et donc les mots-clés « et », « ou » et « non » peut être utilisé à la place de '& &', '||' et '!' respectivement.

Je suppose que depuis & & est le seul qui est fait maladroit dans xml (il n'y a rien de difficile à mettre |! Ou en XML), puis ET est le seul qui était correctement testé

Questions connexes