2013-07-18 14 views
0

我試圖在建議readObject()連接點的after建議下面的示例代碼中執行readObject()之後獲取讀取字符串的值。在執行切入點的建議後訪問類成員

public class Eg { 

    private ObjectOutputStream output; 
    private ObjectInputStream input; 
    Public String request=""; 

    public Eg(File source){ 
      output; // output stream to client 
      input= new ObjectInputStream(file); 
     } 

    public void method() { 
      try{    
       while(true) { 
        request =(String) input.readObject(); 
        //do something with request 
       }//while 
      } 
      catch (IOException ex) 
      { 
       ex.printStackTrace(); 
      } 
    } 

} 

和我的方面:

public aspect ReadStringGetter { 
    public pointcut readOperation() : 
     execution(* java.io.ObjectInputStream.readObject()); 

    after() : readOperation() { 
     Eg eg = (Eg) thisJoinPoint.getThis(); 
     System.out.println(eg.request); 
    } 
} 
+0

公共方面ReadStringGetter { 公共切入點readOperation() :執行(* java.io .ObjectInputStream.readObject()); ():readOperation() { 例如=(例如)thisJoinPoint.getThis(); \t System.out.println(eg.request); \t \t } } – user2447576

回答

0

你可以使用this切入點,以獲得連接點的情況下(的Eg實例):

class Eg { 
    public String request = ""; 
    public void method() { 
     request = "xy"; 
     System.out.println(request); 
    } 
} 

來電者:

Eg c = new Eg(); 
c.method(); 

方面:

public aspect MyAspect { 

    pointcut EgMethodsExecution(Eg eg) : 
     execution(* Eg.method(..)) && this(eg); 

    after(Eg eg) : EgMethodsExecution(eg) { 
     System.out.println("~ in aspect ~ " + eg.request); 
    } 

} 

輸出:

XY
〜縱橫〜XY