【问题标题】:AspectJ Pointcut on Methods with Multiple Annotations具有多个注释的方法上的 AspectJ 切入点
【发布时间】:2015-11-06 20:01:36
【问题描述】:

使用加载时编织,纯 AspectJ。

我们有 2 个注解 @Time@Count,以及一些注解的方法。

@Time (name="myMethod1Time")
@Count (name="myMethod1Count")
public void myMethod1(){..};

@Time (name="myMethod2Time")
public void myMethod2(){..};

@Count (name="myMethod3Count")
public void myMethod3(){..};

现在我正在为myMethod1 定义我自己的环绕方面,它有多个注释:

// multiple annotations, not working
@Around("@annotation(time) && @annotation(count))
public Object myAspect(Time time, Count count) {..}

这不起作用。但是,捕获方法 myMethod2 可以很好地处理单个注释:

// single annotation, is working
@Around("@annotation(time))
public Object myAnotherAspect(Time time) {..}

我只想捕获签名中同时存在TimeCount 注释的方法,并且我想使用注释值。有人知道如何实现吗?

【问题讨论】:

  • 我只是评论它适用于纯 AspectJ - 刚刚尝试过 - 所以也许在 spring-aop 中使用它是问题所在。 (但是,在纯 AspectJ 中,您还需要使用 execution(* *(..)) 否则它将匹配带注释的方法的调用和带注释的方法的执行 - 建议将在每个方法中运行两次)
  • 我正在使用纯 AspectJ 和加载时编织,它对我不起作用,听起来很奇怪。
  • 也许会引发一个 AspectJ 错误,或者发布一个更完整的失败程序,我可以深入研究它。到目前为止,我所做的只是将您在上面发布的内容拼接在一起。
  • 如何改变多个APO的调用顺序?

标签: java annotations aop aspectj spring-aop


【解决方案1】:

也许结合 2 个切入点,例如:

@Around("call(@Time * *(..)) && call(@Count * *(..))");

【讨论】:

    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多