2011-11-30 27 views
2

Spring AOP的超类方法的执行,请考虑以下情况:没有@target

class A() { 
    void a(); 
} 

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

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

现在的问题:是否有可能建立没有@target的切入点expressino,但具有相同的效果?

回答

0

你可以像这样使用。

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的上下文中,两个连接点之间没有区别。

相关问题