Как указать один pointcut для нескольких пакетов - PullRequest
11 голосов
/ 08 декабря 2011

Я использую Aspect для регистрации действий в моем приложении, основанном на Spring mvc.Я использую аннотации @ controller для определения любого контроллера в моем приложении.У меня есть два разных контроллера в двух разных пакетах, скажем

  • com.package1 содержит класс контроллера 1, назовем его AController
  • com.package2 содержит класс контроллера 2, назовем его какBController

Я могу применить аспект к одному конкретному пакету контроллеров, используя

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

Мой вопрос заключается в том, как указать более одного другого пакета в выражении (* package1. . . (..)) **.

Прямо сейчас я объявляю один отдельный pointcut для каждого пакета и в аспекте один отдельный aop:before и aop:after запись для каждого pointcut.Но я думаю, что это должен быть идеальный способ для определения нескольких пакетов pointcut.

Ответы [ 3 ]

42 голосов
/ 08 декабря 2011

Вы можете использовать логические операторы:

expression="execution(* package1.*.*(..)) || execution(* package2.*.*(..))"
11 голосов
/ 17 декабря 2015

Если вы используете Аннотации

@Pointcut("within(com.package1..*) || within(com.package2..*)")
1 голос
/ 02 мая 2018

Весной Boot

@Before("execution(* PackageName.Controller.Service.MethodName(..))          
  ||execution(* PackageName.Controller.Service.*.*(..))")

Пример Spring-проекты / AOP

...