J'ai des problèmes avec une définition de pointcut dans Spring (version 2.5.6). J'essaie d'intercepter tous les appels de méthode à une classe, à l'exception d'une méthode donnée (someMethod dans l'exemple ci-dessous).
<aop:config>
<aop:advisor
pointcut="execution(* x.y.z.ClassName.*(..)) AND NOT
execution(* x.y.x.ClassName.someMethod(..))"
/>
</aop:config>
Cependant, l'intercepteur est également appelé pour une méthode.
Puis 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 ce n'est pas une syntaxe valide (j'obtiens une BeanCreationException).
Quelqu'un peut-il donner des conseils?
je sais que c'est probablement un peu tard à ce stade, mais ive a eu le même problème et je l'ai résolu en échappant les caractères esperluette afin que son && !
au lieu de 'AND NOT' ou '&&!'. Je le fais ceci dans le fichier XML
<aop:config>
<aop:pointcut id="blah" expression="execution(* com.disney.goofy..*.*(..)) && !@annotation(com.disney.goofy.NonDisneyCharacter)"/>
<aop:advisor advice-ref="transAdvice" pointcut-ref="blah"/>
</aop:config>
Ceci s'applique à toutes les méthodes exécutées dans com.disney.goofy et qui ne sont pas annotées avec NonDisneyCharacter.
Cela devrait fonctionner ( référence AOP de printemps ):
pointcut="execution(* x.y.z.ClassName.*(..))
&& !execution(* x.y.x.ClassName.someMethod(..))"
J'utilise également spring 2.5.6 et je rencontrais un problème similaire avecOUqui ne fonctionnait pas, maisET fonctionnait . Il s'avère que ou (en minuscule) ne fonctionne pas , donc il y a clairement un bug dans ce code.
Il est intéressant de noter que la syntaxe correcte pour aspectJ est && , || , et ! , mais la syntaxe et/ou/not a été ajoutée au printemps pour faciliter le travail en xml. Du manuel:
Lorsque vous combinez des sous-expressions De type pointcut, '&&' est maladroit Dans un document XML. Les mots-clés 'Et', 'ou' et 'non' peuvent être utilisé à la place de '&&', '||' et '!' respectivement.
J'imagine que puisque && est le seul qui soit en fait / maladroit en xml (il n'y a rien de difficile à mettre | ou! En xml) alorsETest le seul celui qui a été correctement testé