我们可以将多个切入点映射到单个建议吗?

时间:2014-11-11 19:07:57

标签: spring aop aspectj pointcut

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

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

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

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

所以任何人都可以知道如何在一个建议上配置这两个切入点?

因为单点切入单一建议,如下所示

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

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

2 个答案:

答案 0 :(得分: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() {}

答案 1 :(得分:0)

是的,您可以将切入点与逻辑AND(&&)以及逻辑OR(||)运算符组合使用,或者通过逻辑NOT(!)对它们进行否定。

你可能想要的是这个:

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

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