我有一个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
)。这可能吗?如果是这样,我该怎么做?
答案 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));