在AspectJ中调用n个参数

时间:2012-12-22 14:12:16

标签: java parameters aop aspectj

假设我定义了此表单的切入点

* *.*(..)

我希望定义一个around建议,如何调用继续使用任意数量的参数?

我想过使用反射和thisJoinPoint.getArgs(),但在尝试之前,我想知道是否有一个干净简单的方法。

1 个答案:

答案 0 :(得分:3)

常见的误解是proceed采用与模式匹配的方法相同的参数。但是,proceed会接受 建议 规定的论据。

示例:

class C {   
    public void foo(int i, int j, char c) {
        System.out.println("T.foo() " + i*j + " " + c);
    }
}

class Context {
    public int bar = 7;
    public void doStuff() {
        C c = new C();
        c.foo(2, 3, 'x');
    }
}

有一个方面:

public aspect MyAspect {

    pointcut AnyCall() : 
        call(* *.*(..)) && !within(MyAspect);

    void around(Context c) : AnyCall() && this(c) {
        if (c.bar > 5)
            proceed(c);  // based on "around(Context c)"
    }       
}