1

メソッドの入口/出口をトレースするために使用する次のポイントカットを思いつきました。それは壊れておらず、私が望むこともしますが、1-不器用に見えるか、よりエレガントになる可能性があります。2-防弾かどうかはわかりません。

// tracing the execution of all methods except:
// - toString and descendants
// - methods identified with @NotTraced and descendants
pointcut theMethod() :
        within(*.*) &&
        !within(tracing.*)
        && execution(* *(..))
        && !adviceexecution()
        && !cflow(adviceexecution())
        && !execution( String *.toString() )
        && !cflow(execution( String *.toString() ))
        && !execution( @NotTraced * *(..) )
        && !cflow(execution( @NotTraced * *(..) ));

何かご意見は?

4

1 に答える 1

1

必要以上に複雑です。

私はそれを2つの部分に分けます:

  1. すべてのメソッド呼び出し例外 toString()
  2. すべてのメソッドは例外 @NotTraced を呼び出し、その子孫です。

その後、 を使用&&して、2 つのポイントカットを同じアスペクトに配置できます。

このようにして、これらのいずれかを別の場所で使用する必要がある場合に備えて、柔軟性を高めることができます。

私は非常に単純なことから始めて、Eclipse で AJDT を使用して、どのジョインポイントが影響を受けているかを監視し、必要なものを取得するために最低限必要なものを用意します。

ここで、 cflow と実行が 3 つの異なる場所で繰り返されているため、たとえば!adviceexecution()and など、ここに冗長性があるようです。!cflow(adviceexecution)

AJDT はここであなたの味方になります。たとえば、何を除外したいのかを正確に判断するのは難しいためです。

不要な影響を避けるために、非常にシンプルにしてください。

于 2009-10-31T22:57:19.380 に答える