私の大きなプロジェクトの 1 つでかなり長い間、aspectJ を使用していました。このプロジェクトは、複雑なドキュメント処理/クエリ システムのフロント エンドである複数の機能を持つ複数の Web サービスで構成されていました。約 75,000 行のコード。2 つの比較的マイナーな機能にアスペクトを使用しました。
最初は、アプリケーション フローのトレースでした。各関数呼び出しの前後に実行され、「entered 'function'」と「exited 'function'」を出力するアスペクトを作成しました。関数セレクター (ポイントカットかな? 正しい名前は覚えていません) を使用して、これをデバッグ ツールとして使用し、特定の時点でトレースしたい関数のみを選択することができました。これは、私たちのプロジェクトのアスペクトにとって本当に良い使い方でした。
次に行ったのは、アプリケーション固有のメトリックです。タイミング、オブジェクト情報などをキャプチャし、結果をデータベースにダンプするために、Web サービス メソッドにさまざまな側面を配置します。この情報を取得できたのは良かったのですが、その取得コードはすべて、作業を行った「実際の」コードから分離したままにしています。
アスペクトがもたらす優れた解決策について読んだことがありますが、「通常の」テクノロジーではできなかった (おそらくもっと優れた) ことを、アスペクトが実際にできるとは確信していません。たとえば、私たちのプロジェクトで必要とされていて、アスペクトなしでは簡単に実行できない主要な特徴や機能は思いつきませんでした。 .