2010-02-15 23 views
18

In Spring (versione 2.5.6) si verificano problemi con una definizione di collegamento. Sto cercando di intercettare tutte le chiamate di metodo a una classe, tranne che per un determinato metodo (someMethod nell'esempio seguente).Sintassi Spring AOP Pointcut per AND, OR e NOT

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

Tuttavia, l'intercettatore viene invocato anche per alcuni parametri.

Poi ho provato questo:

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

Ma questo non compila in quanto non è la sintassi valida (ho un BeanCreationException).

Qualcuno può dare qualche consiglio?

+0

Hai mai pensato di scrivere la logica di aspetto con lo stile @AspectJ? È molto più semplice e più potente scrivere la logica degli aspetti con Java. Soprattutto se stai usando Eclipse con il plugin AJDT. – Espen

risposta

18

so la sua, probabilmente un po 'tardi, in questa fase, ma Ive stato avendo lo stesso problema e ho risolto facendo fuggire i caratteri ampersand così la sua &amp;&amp; ! invece di' AND NOT 'o' & &! '. sto facendo questo nel file 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> 

Questo vale il consiglio a tutti i metodi eseguiti in com.disney.goofy e che non sono annotati con NonDisneyCharacter

4

Questo dovrebbe funzionare (spring AOP reference):

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

Non funziona, ho paura.Notare che il riferimento Spring dice &&> AND and! > Non nei file XML. Grazie comunque per il suggerimento :) – Odinodin

1

Sto anche utilizzando primavera 2.5. 6 e stava avendo un problema simile con O non funzionante, ma Eera funzionante. Si scopre che o (in lettere minuscole) fa funziona, quindi c'è chiaramente un bug in quel codice.

E 'interessante che la sintassi corretta è AspectJ & &, || e !, ma la sintassi and/or/not è stata aggiunta in primavera per semplificare il lavoro in xml. Dal manuale:

Quando si combinano pointcut sottoespressioni, '& &' è imbarazzante all'interno di un documento XML, e così i parole chiave 'e', ​​'o' e 'non e' possibile usato al posto di '& &', '||' e '!' rispettivamente.

direi che dal & & è l'unico che è realtà imbarazzante in XML (non c'è niente di difficile, di mettere |! O in XML) poi E è l'unico che è stato correttamente testato

Problemi correlati