How to specify single pointcut for multiple packages

Ketan picture Ketan · Dec 8, 2011 · Viewed 30.4k times · Source

I am using Aspect for logging activities in my spring mvc based application. I am using @controller annotations to define any controller in my application. I have two different controller in two different package say

  • com.package1 contains controller 1 class, let's name it as AController
  • com.package2 contains controller 2 class, let's name it as BController

I am able to apply aspect to one particular package of controllers by using

<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" />

My question is how to specify more that one different package in expression(* package1...(..))**.

Right now I am declaring one separate pointcut for each package and in aspect one separate aop:before and aop:after entry for each pointcut. But I think this should be ideal way to define multiple packages pointcut.

Answer

Sean Patrick Floyd picture Sean Patrick Floyd · Dec 8, 2011

You can use boolean operators:

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