【问题标题】:AspectJ exchange data between Advice and JoinPointAspectJ 在 Advice 和 JoinPoint 之间交换数据
【发布时间】:2014-04-16 01:12:06
【问题描述】:

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

【问题讨论】:

  • 这不是一个好主意。建议的代码不应该知道建议。
  • 查看ThreadLocal

标签: java spring aop aspectj spring-aop


【解决方案1】:

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

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

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

然后从方面

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2013-04-04
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多