任何公共服务方法的AOP切入点表达式

时间:2011-07-28 14:52:55

标签: java spring aop aspectj spring-aop

哪个最简单的切入点表达式会拦截用@Service注释的所有bean的所有公共方法?例如,我希望它会影响这个bean的两个公共方法:

@Service
public MyServiceImpl implements MyService {
    public String doThis() {...}
    public int doThat() {...}
    protected int doThatHelper() {...} // not wrapped
}

1 个答案:

答案 0 :(得分:4)

documentation应该非常有用。

我会创建两个单独的点切割,一个用于所有公共方法,一个用于所有使用@Service注释的类,然后创建第三个用于组合其他两个切入点表达式的切入点。

查看( 7.2.3.1支持的切入点指示符 )以供要使用的指示符。我认为你是在寻找公共方法的'执行'指示符,以及用于查找注释的'注释'指示符。

然后看一下( 7.2.3.2组合切入点表达式 )来组合它们。

我在下面提供了一些代码(我已经测试了)。它主要来自文档。

@Pointcut("execution(public * *(..))") //this should work for the public pointcut
private void anyPublicOperation() {}

//@Pointcut("@annotation(Service)") this might still work, but try 'within' instead
@Pointcut("@within(Service)") //this should work for the annotation service pointcut
private void inTrading() {}

@Pointcut("anyPublicOperation() && inTrading()")
private void tradingOperation() {}