區別:
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