任何人都可以向我解释AspectJ在运行时的“上下文绑定”是什么,以及它与反射有什么不同?
特别是,如果我需要从一个由给定方面编织的类中获得注释,上下文绑定:
after(MyAnnotation annotation) : execution(* Foo.*(..)) && @this(annotation)
或反思:
MyAnnotation myAnnotation = thisJoinPoint.getThis().getClass().getAnnotation(MyAnnotation.class);
,但最好的解决方案是什么(即最快的解决方案)?
答案 0 :(得分:1)
你最好使用前者。创建thisJoinPoint
对象非常昂贵,因为访问时必须填写所有字段。因此,AspectJ只会在需要时创建一个。
通过建议访问注释通常更快,因为编译器有更多机会进行优化。此外,它是更强类型(您的第二个示例有类型错误)。