没有@target的Spring AOP超类方法执行

时间:2011-11-30 20:35:56

标签: spring aop

考虑以下情况:

class A() {
    void a();
}

@MyAnnotation
class B extends A {
    void b();
}

我想建议使用@MyAnnotation注释的所有类的所有方法(即B.a())。 由于可以使用@target切入点表达式,这是非常简单的任务。 但!在这种情况下,容器中的所有bean(甚至是不合适的)都将被Proxified,这是不可接受的。

现在的问题是:是否有可能在不使用@target的情况下构建切入点表达式,但具有相同的效果?

1 个答案:

答案 0 :(得分:1)

你可以像这样使用。

execution(* *(..)) && within(@MyAnnotation *)

有关详细信息,请参阅https://stackoverflow.com/a/2522821/672586http://forum.springsource.org/showthread.php?28525-Difference-between-target-and-within-in-Spring-AOP。论坛帖子的相关部分解释了内部和目标之间的区别

两者之间的一个区别是@within()是静态匹配的,要求相应的注释类型只有CLASS保留。然而,@ target()在运行时匹配,要求具有RUNTIME保留。除此之外,在Spring的上下文中,两个选择的连接点之间没有区别。