我正在寻找一种在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之前执行一些操作,然后我需要在建议和正在执行的方法之间进行通信,然后我需要在执行方法后执行更多操作。
答案 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类。