アプリケーションの設計に AOP が効果的に関与する可能性のあるケースを示したいと思います。これまでに会ったのは次のとおりです。
- ロギング関連
- セキュリティチェック
- 取引管理
- レガシーアプリケーションの微調整
他に何か?
(Spring のプロキシベースの AOP である必要はなく、むしろ JBoss AOP です。)
(関連する質問)
使用例を 2 つ挙げます。
リモート管理のために JMX にオブジェクトを自動的に登録します。クラスにアノテーションが付けられている場合、@AutoRegisterそのクラスの新しいインスタンス化を監視し、それらを JMX に自動的に登録するアスペクトがあります。
監査ログ (ゴールド スタンダードの AOP ユース ケース)。少し粗いですが、一般的なアプローチは、監査可能なアクションを表すメソッドに注釈を付けることです。Spring Security のようなものと組み合わせると、次のことについてかなり良いアイデアを得ることができます。
うわー... 10年前-AOPにはあまりありませんでした...ここにいくつかあります
適用性の観点から AOP のカバレッジを確認するには、Aspect-Oriented-Software-Development-Use-Casesという本を読むことを強くお勧めします。この本では、AOP を使用した機能要件と非機能要件のユース ケースについて詳しく説明しています。その後、ロギング、トレース、セキュリティなどよりも多くの要件にアスペクトを使用できることがわかります。
メソッドがステートレスである場合のメソッド レベルのキャッシング (つまり、同じパラメーター値で繰り返し呼び出されたときに同じ値を返すことを意味します)。これは、データベース ヒットを回避するため、DAO メソッドの場合により効果的です。
ソフトウェア ライセンス管理に使用します。つまり、コンピュータに特定のライセンスがインストールされている場合にのみソフトウェアの実行を許可します。これはセキュリティチェックの一種であるため、リストされている用途とそれほど違いはありません。
ここで実用的な実装を説明するブログエントリを公開しました
あなたがリストしたすべてのものに加えて、AOPの1つの効果的な使用法は検証です。ユーザー入力またはビジネス オブジェクトの検証。
必見の関連記事。
INotifyPropertyChangedおよび同様のホラー。
基本的に、このようなコードがある場合は常に、アスペクトを使用すれば完了です。
コード コントラクトのランタイム チェック。.NET のコード コントラクトは、 AOP を次の目的で使用します。
ランタイム チェック。私たちのバイナリリライターは、プログラム実行の一部としてチェックされるコントラクトを注入することによってプログラムを変更します。
また、次の側面もお勧めします。
Spring と tcServer (開発者) を使用すると、すべての Spring Bean を @Component アノテーションで簡単に監視できます。使用時間、例外を含む入力および戻りデータを確認できます。
AspectJ を使用して AOP を実現します。上記以外のユースケースは次のとおりです。