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

发布于 2024-12-20 09:23:29 字数 1017 浏览 2 评论 0原文

我正在使用 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" />

我的问题是如何在 expression(* package1...(..))** 中指定多个不同的包。

现在,我为每个包声明一个单独的切入点,并为每个切入点声明一个单独的 aop:beforeaop:after 条目。但我认为这应该是定义多个包切入点的理想方式。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风月客 2024-12-27 09:23:29

您可以使用布尔运算符:

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

You can use boolean operators:

expression="execution(* package1.*.*(..)) || execution(* package2.*.*(..))"
放我走吧 2024-12-27 09:23:29

如果您使用注释

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

In case you use Annotations

@Pointcut("within(com.package1..*) || within(com.package2..*)")
栀子花开つ 2024-12-27 09:23:29

在 Spring Boot

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

示例中 Spring项目/AOP

In spring Boot

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

Example Spring-projects/AOP

要走就滚别墨迹 2024-12-27 09:23:29
  @Pointcut("execution(* pakageName.anyClassNameX.*(..)) || execution(* pakageName.anyClassNameY.*(..))")
  public void allMethods() {
  }

  @Around("allMethods()")
  public Object intercept(ProceedingJoinPoint thisJoinPoint) throws Throwable {
    try {
      return thisJoinPoint.proceed();
    } catch (Exception ex) {
     
    }
  }
  @Pointcut("execution(* pakageName.anyClassNameX.*(..)) || execution(* pakageName.anyClassNameY.*(..))")
  public void allMethods() {
  }

  @Around("allMethods()")
  public Object intercept(ProceedingJoinPoint thisJoinPoint) throws Throwable {
    try {
      return thisJoinPoint.proceed();
    } catch (Exception ex) {
     
    }
  }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文