AOP(AspectJ):有没有办法在处理程序通知中获取封闭方法的上下文参数?

时间:2012-05-17 15:30:46

标签: aop aspectj

我有一个AspectJ 建议,其切入点handler类型的切入点。

以下是包含我想建议的加入点的方法:

public void foo(String p1) {
    try {
        // some code
    }
    catch(Exception ex) {
        // more code    
    }
}

以下是我方面的代码:

pointcut foopc(Exception ex) : handler(Exception) && args(ex) && withincode(public void foo(String));

before(Exception ex) : foopc(ex) {
    // advice body  
}

我想要的是捕获变量p1并在建议体中使用它(除了异常ex)。这可能吗?如果是这样,我该怎么做?

1 个答案:

答案 0 :(得分:0)

我相信我已经明白了。如果某人有更好的答案或更合适的方式,我会接受它。

方面内的代码:

pointcut fooExec(String p1) : 
    execution(public void foo(String)) && args(p1);

pointcut fooHandler(String p1, Exception ex) :
    cflow(fooExec(p1)) && handler(Exception) && args(ex)
    && withincode(public void foo(String));

before(String p1, Exception ex) : fooHandler(p1, ex) {
    // I can now use the variables p1 and ex.
}

编辑:

我应该指出execution中的签名可能只是* *(String),而这两个切入点可以合并为一个:

pointcut fooHandler(String p1, Exception ex) :
    cflow(execution(* *(String) && args(p1))) 
    && handler(Exception) && args(ex)
    && withincode(public void foo(String));