2010-11-30 5 views
30

最初に私はAspectJを使用していますが、私はそれが好きですが、他に何ができるのでしょうか?AspectJとは何ですか?

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

しかし、AspectJとAOPは一般的に、ロギング、トランザクション制御、およびシミュレーションの部分クラス以上の目的で使用できます。

AspectJとAOPの他の有用な使用例は何ですか?

+2

Ramnivas LaddadのAspectJ in Actionを読んでください。http://www.manning.com/laddad2目次はあなたにアイデア:http://www.manning.com/laddad2/excerpt_contents.html –

+2

@ジョージストッカー:質問には14 upvotes、0 downvotes、合計21 upvotesで3つの答え、そしてあなたは4年後にそれを保留に - 本当に?要点は、この質問には良い答えがあるため、実際には「あまりにも広すぎる」問題がないことです。 – Ralph

+0

閉鎖について議論したいのであれば、自由にメタ上に公開してください。あまりにも広いと結論は、投票、意見、または現在の回答から独立しています。それは質問の範囲と関係しています。 –

答えて

26
  • パーミッションチェック
  • 割り込みアクション通話後の通話および処理結果
  • 開閉リソース

EDIT

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

  • セキュリティチェック。
  • 変更できないAPIの不具合や動作を修正しました。たとえば、条件によってはfalseを返すブールメソッドですが、trueを返す必要があります。これはAspectJを使って修正できます。
+1

キャッシングは別の用途です – ex0b1t

+0

ありがとう、@ ex0b1t。どのリストも決して満杯にならない。 – AlexR

16

Wikipedia entryにはいくつかの例がありますが、それほど多くはありません。通常、Aspect Oriented Programingは、クラスの中核的な関心事ではなく、異なるクラスに共通の単純なビヘイビアを実装するためにのみ使用する必要があります。あなたの側面にあまりにも多くのロジックを入れ始めると、コードは本当に読めなくなります。

(ロギング、トランザクション、...)の提案が最も一般的に使用されます。私もセキュリティを追加します。前の任意のデータ/環境を準備

  • を監視
  • 他のマシン上に別のスレッドで、あるいは異なるプロセスやイベントのコンテキストでは長すぎる
  • に実行されたアクションをとる

  • 2

    いくつかの(デザイン)ルールを強制するためにAspectJを使用することができます。 checking that setters do not have any logic:すべてのコントローラメソッドのような

    • すべてのサービス/フロントエンド
    • いくつかの特別な注釈を必要とする/ DTOクラスは、サービス/ fronten/DTOの可能パッケージに配置する必要があります
    • より成熟は次のように考えています。そうでない場合は、新しい使用して、新しいインスタンスを作成したクラスで

    を注入モック 。 は、あなたがこのコードを持っていると仮定します

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

    そしてモックでemailを交換する必要があります。次に、模擬を「注入」するために、アスペクト(@Pointcut("call(InvitationEmail.new(..))") )を使用することができます。 - @See Blog JMock and AspectJ Daniel Roop著、Spring Roo`S @MockStaticEntityMethods(Mock Static Methods using Spring Aspect

    関連する問題