すべてのメソッド実行をキャプチャしたいと思います。そのため、ポイントカットの下に定義し、get/set ポイントカット指定子を使用してフィールド アクセスを除外しようとしましたが、機能しません。
助言がありますか?どうもありがとう。
pointcut funcExecutionPointcut():execution(* *.*(..)) && !get(* *.*) && !set(* *.*);
before():funcExecutionPointcut() {
//log some info.
Signature sig = thisJoinPointStaticPart.getSignature();
String className = "";
if (thisJoinPoint.getThis() != null)
className = thisJoinPoint.getThis().getClass().getName();
mylogger.log(Level.INFO,"Entering [(" + className + ")" + sig.toShortString() + "] @" + line + "@" +file);
}
問題は、出力がクラスのフィールドもポイントカットによってヒットしたことを示していることです。以下のようにログします。
2013-09-30 11:39:11:18 Thread-447 INFO AspectJFuncTracing - Entering [()ImageListManager.access$0(..)] @48@ImageListManager.java
2013-09-30 11:39:11:19 Thread-447 INFO AspectJFuncTracing - Entering [()ImageListManager.access$1(..)] @56@ImageListManager.java
対応するソースコードは以下の通りです。
....
public void run() {
while (mThreadBeing) {
try {
sleep(sleeptime);
} catch (Exception e) {
e.printStackTrace();
}
sleeptime = 200;
if (!mThreadBeing) {
break;
}
if (mScrolling) {
continue;
}
...
ImageListManager.access$0 はクラス フィールド mThreadBeing を指し、ImageListManager.access$1 はクラス フィールド mScrolling を指します。