如何为多个包指定单个切入点

Ket*_*tan 12 aop spring spring-aop pointcut aspect

我在基于spring mvc的应用程序中使用Aspect进行日志记录活动.我正在使用@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" />
Run Code Online (Sandbox Code Playgroud)

我的问题是如何指定在一个以上的不同包装的表达(*包1. ..(..))**.

现在我宣布为每个包在一个方面的一个单独的一个单独的切入点aop:before,并aop:after为每个切入点条目.但我认为这应该是定义多个包切入点的理想方式.

Sea*_*oyd 45

您可以使用布尔运算符:

expression="execution(* package1.*.*(..)) || execution(* package2.*.*(..))"
Run Code Online (Sandbox Code Playgroud)


Roh*_*aha 11

如果您使用注释

@Pointcut("within(com.package1..*) || within(com.package2..*)")
Run Code Online (Sandbox Code Playgroud)