aspectJ的this和target的区别

区别:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章