AspectJ在Advice和JoinPoint之间交换数据

时间:2014-04-15 16:28:33

标签: java spring aop aspectj spring-aop

我正在寻找一种在Advice和JoinPoint之间传递对象的方法,如下所示,

@Aspect
class SomeAspect {

    @Around(execution * *.*(..) && @annotation(sample))
    public Object PassbyRef(PJP pjp) {

        SomeObjectToPass someObj = new SomeObjecttoPass();

        Object retVal = pjp.proceed(someObj);
        //process(someObj);
    }
}

class UsingAspect {

    @sample
    public Object TestMethod() {

        //how do I access someObj in this method?
    }
}

我希望在执行方法/ JP之前执行一些操作,然后我需要在建议和正在执行的方法之间进行通信,然后我需要在执行方法后执行更多操作。

1 个答案:

答案 0 :(得分:0)

奇怪的想法,但如果你的设计需要这个你可以尝试这样的事情:

只需在您的Advice类中添加一个getter,或者创建一个需要此接口的接口

class UsingAspect {
public getSomeObj(){return someObj};
}

然后从Aspect

if (joinPoint.getTarget().getClass() == UsingAspect.class){
  UsingAspect ua=(UsingAspect)joinpoint.getTarget();
  ua.getSomeObj()
}

然后在Advice和Aspect中你应该引用相同的someObj。如果你想反向执行此操作,只需添加一个setter并将对象保存到Advice类。