rap*_*apt 16 spring spring-aop
从Spring文档:
代理实现AccountService接口的任何连接点(仅在Spring AOP中执行方法):
this(com.xyz.service.AccountService)
Run Code Online (Sandbox Code Playgroud)目标对象实现AccountService接口的任何连接点(仅在Spring AOP中执行方法):
target(com.xyz.service.AccountService)
Run Code Online (Sandbox Code Playgroud)我不明白什么是"目标对象"和表达方式target(...).
有什么target不同this?
Bij*_*men 24
this(AType)表示所有连接点都this instanceof AType为真.所以这意味着在你的情况下,一旦调用到达AccountService的任何方法都this instanceof AccountService将是真的.
target(AType)表示所有连接点在哪里anObject instanceof AType.如果要在对象上调用方法,并且该对象是AccountService的实例,那么它将是有效的连接点.
总结一种不同的方式 - this(AType)从接收者的角度来看,并且target(AType)来自呼叫者的角度.
Aki*_*ira 11
我知道这是一个老帖子,但我发现这个和目标之间的重要区别,而不使用AspectJ.
请考虑以下介绍方面:
@Aspect
public class IntroductionsAspect {
@DeclareParents(value="a.b.c.D", defaultImpl=XImpl.class)
public static X x;
@After("execution(* a.b.c.D.*(..)) && this(traceable)")
public void x(Traceable traceable) {
traceable.increment();
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,这方面做了两件事:
a.b.c.D类实现X接口.traceable.increment()在每个方法之前添加要执行的调用a.b.c.D.重要的是"execution(* a.b.c.D.*(..)) && this(traceable)".请注意,我使用了这个,而不是目标.
如果您使用目标,则尝试匹配原始类a.b.c.D,而不是引入的接口X.所以Spring AOP将找不到任何连接点a.b.c.D.
综上所述:
this - 检查代理类型或引入的类型. target - 检查声明的类型.
从官方文件:
Spring AOP是一个基于代理的系统,它区分代理对象本身(绑定到'this')和代理后面的目标对象(绑定到'target').
| 归档时间: |
|
| 查看次数: |
11869 次 |
| 最近记录: |