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