2011-12-08 17 views
10

Sto utilizzando Aspect per le attività di registrazione nella mia applicazione basata su mvc di primavera. Sto usando le annotazioni @controller per definire qualsiasi controller nella mia applicazione. Ho due controller diverso in due pacchetto differente direCome specificare single pointcut per più pacchetti

  • com.package1 contiene controller di 1 classe, diamo il nome come AController
  • com.package2 contiene classe controller 2, diamo il nome come BController

sono in grado di applicare aspetto da un particolare pacchetto di controller utilizzando

<aop:config> 
    <aop:pointcut id="pointcut1" 
     expression="execution(* package1.*.*(..))" 
     id="policy1" /> 
    <aop:aspect ref="aspect1" order="1"> 
     <aop:before pointcut-ref="pointcut1" method="before" arg-names="joinPoint" /> 
     <aop:after-returning returning="returnValue" arg-names="joinPoint, returnValue" pointcut-ref="pointcut1" method="after" /> 
    </aop:aspect> 
</aop:config> 


<bean id="aspect1" class="com......aspectclass" /> 

La mia domanda è come specificare più di un pacchetto differente i n espressione (* pacchetto1. .. (..)) **.

In questo momento sto dichiarando un pointcut separato per ogni pacchetto e in aspetto uno separato aop:before e aop:after voce per ogni pointcut. Ma penso che questo dovrebbe essere il modo ideale per definire più pacchetti di punti.

risposta

34

È possibile utilizzare gli operatori booleani:

expression="execution(* package1.*.*(..)) || execution(* package2.*.*(..))" 
6

Nel caso in cui si utilizza NOTE

@Pointcut("within(com.package1..*) || within(com.package2..*)")