Как да зададете един pointcut за множество пакети

Използвам Aspect за регистриране на дейности в моето пролетно приложение, базирано на 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" />

Въпросът ми е как да посоча повече от един различен пакет в expression(* package1...(..))**.

Точно сега декларирам един отделен pointcut за всеки пакет и в аспект един отделен aop:before и aop:after запис за всеки pointcut. Но мисля, че това трябва да е идеалният начин за дефиниране на множество пакети pointcut.


person Ketan    schedule 08.12.2011    source източник


Отговори (3)


Можете да използвате булеви оператори:

expression="execution(* package1.*.*(..)) || execution(* package2.*.*(..))"
person Sean Patrick Floyd    schedule 08.12.2011

В случай, че използвате Пояснения

@Pointcut("within(com.package1..*) || within(com.package2..*)")
person Rohan Kushwaha    schedule 17.12.2015

През пролетта Boot

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

Примерни Spring-projects /AOP

person Dapper Dan    schedule 02.05.2018