考虑以下情况:
class A() {
void a();
}
@MyAnnotation
class B extends A {
void b();
}
我想建议使用@MyAnnotation注释的所有类的所有方法(即B.a())。 由于可以使用@target切入点表达式,这是非常简单的任务。 但!在这种情况下,容器中的所有bean(甚至是不合适的)都将被Proxified,这是不可接受的。
现在的问题是:是否有可能在不使用@target的情况下构建切入点表达式,但具有相同的效果?
答案 0 :(得分:1)
你可以像这样使用。
execution(* *(..)) && within(@MyAnnotation *)
有关详细信息,请参阅https://stackoverflow.com/a/2522821/672586和http://forum.springsource.org/showthread.php?28525-Difference-between-target-and-within-in-Spring-AOP。论坛帖子的相关部分解释了内部和目标之间的区别
两者之间的一个区别是@within()是静态匹配的,要求相应的注释类型只有CLASS保留。然而,@ target()在运行时匹配,要求具有RUNTIME保留。除此之外,在Spring的上下文中,两个选择的连接点之间没有区别。