0

以下のサンプル コードで readObject() の実行後に 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);
    }
}
4

1 に答える 1

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

于 2013-10-29T22:19:24.650 に答える