183

Spring AOPは、フレームワークとしてカスタムJava5アノテーションを使用するため、セキュリティ、ロギング、トランザクションなどのアプリケーション固有のタスクに最適であるという印象を受けています。ただし、AspectJは、よりフレンドリーなデザインパターンのようです。

SpringアプリケーションでSpringAOPとAspectJを使用することのさまざまな長所と短所を強調できる人はいますか?

4

8 に答える 8

255

Spring-AOP の長所

  • LTW ( load-time weaving ) や AspectJ コンパイラを使用する必要がないため、AspectJ よりも簡単に使用できます。

  • Proxy パターンと Decorator パターンを使用します。

Spring-AOP の短所

  • これはプロキシベースの AOP であるため、基本的にメソッド実行のジョインポイントのみを使用できます。
  • 同じクラス内の別のメソッドを呼び出す場合、アスペクトは適用されません。
  • 実行時のオーバーヘッドが少し発生する可能性があります。
  • Spring-AOP は、Spring ファクトリによって作成されていないものにアスペクトを追加できません

AspectJの長所

  • これはすべてのジョインポイントをサポートします。これは、何でもできることを意味します。
  • Spring AOP よりも実行時のオーバーヘッドが少なくなります。

AspectJの短所

  • 気をつけて。編みたいものだけにアスペクトが織り込まれているかどうかを確認します。
  • AspectJ Compiler で追加のビルド プロセスが必要になるか、LTW (load-time weaving) をセットアップする必要があります。
于 2009-10-22T12:10:01.377 に答える
21

他の人が述べたこととは別に、言い換えるとthere are two major differences

  1. 一つは織りの種類に関連しています。
  2. ジョインポイント定義への別の。

Spring-AOP:の概念を使用したプロキシ経由のランタイム ウィービングdynamic proxy if interface exists or cglib library if direct implementation provided.

AspectJ:ソースが利用可能な場合はコンパイル時に織り込むか、コンパイルAspectJ Java Tools(ajc compiler)後の織り込み (コンパイル済みファイルを使用)。また、Spring を使用した読み込み時の織り込みを有効にすることもできます。これにはaspectj定義ファイルが必要であり、柔軟性が提供されます。

コンパイル時のウィービングは、パフォーマンスの利点 (場合によっては) を提供できます。joinpoint definition in Spring-aop is restricted to method definition only which is not the case for AspectJ.

于 2009-10-30T10:01:50.163 に答える
18

スプリングのユーザーマニュアルは、馬の口から直接、多くの情報を提供します.

6.4 - 使用する AOP 宣言スタイルの選択は、両方の長所と短所について説明しているため、役に立ちません。

パラグラフ6.1.2 - Spring AOP Capabilites and goal & chapters 6.2 - @Aspect supportおよび6.8 - Using AspectJ with Spring applicationsは特に興味深いはずです。

于 2009-10-29T07:21:54.060 に答える
0

アスペクトがミッション クリティカルになるかどうか、およびコードがデプロイされる場所を検討することが重要です。Spring AOP は、ロード時のウィービングに依存していることを意味します。これは織りに失敗する可能性があり、私の経験では、ログに記録されたエラーが存在する可能性がありますが、アスペクトコードなしでアプリケーションを実行することを妨げるものではないことを意味しています[これが場合; しかし、私は個人的にそれを認識していません]。コンパイル時のウィービングはこれを回避します。

さらに、aspectj-maven-plugin と組み合わせて AspectJ を使用すると、CI 環境でアスペクトに対して単体テストを実行でき、ビルドされたアーティファクトがテストされ、正しく織り込まれていることを確信できます。確かに Spring 駆動の単体テストを作成できますが、デプロイされたコードが LTW が失敗した場合にテストされたものになるという保証はまだありません。

別の考慮事項は、サーバー/アプリケーションの起動の成功または失敗を直接監視できる環境でアプリケーションをホストしているかどうか、またはアプリケーションが監督下にない環境にデプロイされているかどうかです [たとえば、はクライアントによってホストされています]。繰り返しますが、これは時間織りをコンパイルする方法を示します。

5 年前、Spring で構成された AOP の方が作業が簡単で、IDE を使いこなす可能性が低いという単純な理由で、私ははるかに支持されていました。しかし、コンピューティング能力と利用可能なメモリが増加するにつれて、これはそれほど問題ではなくなり、上で概説した理由に基づいて、私の作業環境では、aspectj-maven-plugin を使用した CTW がより良い選択になりました。

于 2018-01-25T21:47:31.183 に答える