区别:
this(Point)所有与Point执行过程中,出现调用点(包括它内部调用别人的方法)都会执行该切入的方法。
target(Point)只针对于与Point有关系的切入点(内部调用别人的不会)。
验证举例:
this类型的切面:
public aspect HellowAj {
after():this(aspectj.com.source.Hellow2){
System.out.println(thisJoinPoint.getSignature().toString()+"执行了全匹配的切入"+thisJoinPoint.getKind());
}
}
装饰对象:
public class Hellow2 {
public void get(){
int i=Math.max(1,0);
System.out.println("值"+i);
}
}
执行程序:
public class App
{
public static void main( String[] args ) {
Hellow2 f=new Hellow2();
f.get();
}
}
结果:
aspectj.com.source.Hellow2()执行了全匹配的切入constructor-execution
aspectj.com.source.Hellow2()执行了全匹配的切入initialization
int java.lang.Math.max(int, int)执行了全匹配的切入method-call
PrintStream java.lang.System.out执行了全匹配的切入field-get
java.lang.StringBuilder(String)执行了全匹配的切入constructor-call
StringBuilder java.lang.StringBuilder.append(int)执行了全匹配的切入method-call
String java.lang.StringBuilder.toString()执行了全匹配的切入method-call
值1
void java.io.PrintStream.println(String)执行了全匹配的切入method-call
void aspectj.com.source.Hellow2.get()执行了全匹配的切入method-execution
==============================================
target类型
public aspect HellowAj {
after():this(aspectj.com.source.Hellow2){ System.out.println(thisJoinPoint.getSignature().toString()+"执行了全匹配的切入"+thisJoinPoint.getKind()); }
}
结果:
aspectj.com.source.Hellow2()执行了全匹配的切入constructor-execution
aspectj.com.source.Hellow2()执行了全匹配的切入initialization
int java.lang.Math.max(int, int)执行了全匹配的切入method-call
PrintStream java.lang.System.out执行了全匹配的切入field-get
java.lang.StringBuilder(String)执行了全匹配的切入constructor-call
StringBuilder java.lang.StringBuilder.append(int)执行了全匹配的切入method-call
String java.lang.StringBuilder.toString()执行了全匹配的切入method-call
值1
void java.io.PrintStream.println(String)执行了全匹配的切入method-call
void aspectj.com.source.Hellow2.get()执行了全匹配的切入method-execution