46

最初に、私はAspectJを使用していて、それが好きですが、他に何ができるかということに注意してください。

私はAspectJがロギングに使用できる/使用できることを知っています。場合によっては、トランザクション制御に使用されます。ほとんどの場合、注釈と組み合わせて実装されます。AspectJは、Spring Rooのように、(コードで生成された)メソッドでクラスを拡張するためにも使用できます。

しかし、AspectJとAOPは一般的に、ロギング、トランザクション制御、シミュレーション部分クラス以外にも使用できると思います。

では、AspectJとAOPの他の有用なユースケースは何ですか?

4

3 に答える 3

39
  • 許可チェック
  • 時間がかかりすぎる割り込みアクション
  • 別のスレッドで、または他のマシンの別のプロセスやイベントのコンテキストでアクションを実行します
  • モニタリング
  • 通話前にデータ/環境を準備し、通話後に結果を処理する
  • リソースの開閉

編集

この答えを出してから何年も経ちましたが、答えをより完全にするために、以下を追加することにしました。

  • セキュリティーチェック。
  • 変更できないAPIの不正または動作の修正。たとえばfalse、一部の条件では返されるが、を返す必要があるブールメソッドtrue。これはAspectJを使用して修正できます。
于 2010-11-30T12:48:05.070 に答える
20

ウィキペディアのエントリには、さらにいくつかの例が示されています (ただし、それほど多くはありません)。通常、アスペクト指向プログラミングは、クラスの中心的な問題の一部ではなく、さまざまなクラスに共通する単純な動作を実装するためにのみ使用する必要があります。アスペクトにあまりにも多くのロジックを入れ始めるとすぐに、コードは本当に読めなくなります。

あなたが提案する側面(ロギング、トランザクションなど)が最も一般的に使用されています。セキュリティも追加します。

于 2010-11-30T12:43:28.637 に答える
7

AspectJ を使用して、いくつかの (設計) ルールを適用できます。

  • すべてのコントローラーメソッドと同様に、いくつかの特別な注釈が必要です
  • すべてのサービス/フロントエンド/dto クラスは、サービス/フロントエンド/dto パッケージに配置する必要があります
  • より成熟した考え方:セッターにロジックがないことを確認します

new を使用して新しいインスタンスを作成するクラスにモックを注入します。次のコードがあるとします。

public void sendInvitationEmail(String address) {
    InvitationEmail email = new InvitationEmail();
    email.sendTo(address).send();
}

emailそして、モックに置き換える必要があります。次に、 Aspect ( @Pointcut("call(InvitationEmail.new(..))") ) を使用してモックを「注入」できます。-- @Daniel Roop によるブログ JMock と AspectJ 、およびSpring Roo の @MockStaticEntityMethods ( Spring Aspect を使用した静的メソッドのモック)を参照してください。

于 2011-05-02T12:06:49.543 に答える