【发布时间】: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) {..}
我只想捕获签名中同时存在Time 和Count 注释的方法,并且我想使用注释值。有人知道如何实现吗?
【问题讨论】:
-
我只是评论它适用于纯 AspectJ - 刚刚尝试过 - 所以也许在 spring-aop 中使用它是问题所在。 (但是,在纯 AspectJ 中,您还需要使用
execution(* *(..))否则它将匹配带注释的方法的调用和带注释的方法的执行 - 建议将在每个方法中运行两次) -
我正在使用纯 AspectJ 和加载时编织,它对我不起作用,听起来很奇怪。
-
也许会引发一个 AspectJ 错误,或者发布一个更完整的失败程序,我可以深入研究它。到目前为止,我所做的只是将您在上面发布的内容拼接在一起。
-
如何改变多个APO的调用顺序?
标签: java annotations aop aspectj spring-aop