1

在 aspectj 中,我们可以将多个切入点映射到单个通知吗?

例如下面是两个单独的切入点

@Pointcut("execution(* xyz.get(..))")
    void pointcut1() {
    }

@Pointcut("execution(* abc.put(..))")
    void pointcut2() {
    }

那么任何人都可以给出如何在一个建议上配置这两个切入点的想法吗?

因为对于像下面这样的单个切入点,我们有

@Before("pointcut1()")
    public void beforeLogging() {
        System.out.println("Before Methods");
    }

如何为多个切入点配置相同的建议?

4

2 回答 2

1

是的,您可以将切入点与逻辑 AND ( &&) 以及逻辑 OR( ||) 运算符结合起来,或者通过逻辑 NOT ( !) 将它们取反。

你可能想要的是这样的:

@Before("pointcut1() || pointcut2()")

OR 在这里很有意义,因为在您的示例中,逻辑 AND 总是会导致一个空集:一个方法不能同时在两个包中,而是在其中一个包中。

于 2014-11-11T19:22:54.283 回答
0

您可以使用 || 操作员。从文档http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html(9.2.2 声明一个方面):

@Pointcut("execution(public * (..))")
private void anyPublicOperation() {}

@Pointcut("within(com.xyz.someapp.trading..)")
private void inTrading() {}

@Pointcut("anyPublicOperation() || inTrading()")
private void tradingOperation() {}
于 2014-11-11T19:21:41.173 回答