什么是AspectJ上下文绑定?

时间:2011-10-04 09:55:21

标签: aspectj

任何人都可以向我解释AspectJ在运行时的“上下文绑定”是什么,以及它与反射有什么不同?

特别是,如果我需要从一个由给定方面编织的类中获得注释,上下文绑定:

after(MyAnnotation annotation) : execution(* Foo.*(..)) && @this(annotation)

或反思:

MyAnnotation myAnnotation = thisJoinPoint.getThis().getClass().getAnnotation(MyAnnotation.class);

可以使用

,但最好的解决方案是什么(即最快的解决方案)?

1 个答案:

答案 0 :(得分:1)

你最好使用前者。创建thisJoinPoint对象非常昂贵,因为访问时必须填写所有字段。因此,AspectJ只会在需要时创建一个。

通过建议访问注释通常更快,因为编译器有更多机会进行优化。此外,它是更强类型(您的第二个示例有类型错误)。