0

Spring 3のドキュメントから、AOPには2つの方法があることがわかります

  1. AspectJ - <aop:config>xml にメタデータを含めるか、注釈を使用する@Aspect

  2. Spring 独自の実装 - アドバイス用のインターフェースを使用しています (BeforeAdviceなどAfterAdvice)

-- 今まで間違っていたら訂正してください --

これで、 Spring 独自の実装がAutoproxyCreator( BeanNameAutoproxyCreator, DefaultAdvisorAutoproxyCreator) によって実装され、Bean 作成時にBeanPostProcessor.

しかし、AspectJ のプロキシが Spring でどのように行われるか@Aspect

<aop:config>
    <aop:aspect ref= "anyclasshavingAllAdviceMethod">
       <!-- (all aop:before,aop:after-throwing etc) -->
    </aop:aspect>
</aop:config>

プロキシの作成に使用されます。<aop:config>またはの実装の背後にあるメカニズムは何ですか@Aspect

または、ロード時のウェーバーがこれらに使用されます。

注: aop:config を実装するために、追加の Bean や load-time-weaver を提供する必要はありません。

4

1 に答える 1

0

ここにはいくつかのレベルの区別があります。

  1. Spring AOP
    には次の 2 つの種類があります。
    • クラシック (XML) Spring AOP
    • @AspectJ-スタイルスプリングAOP
  2. Aspect-J
    これにも 2 つの種類があります。
    • クラシック AspectJ (.aj)
    • @AspectJ-スタイルアスペクトJ

Spring AOP の両方のフレーバーは、BeanPostProcessors とプロキシを使用して実装されます。

AspectJ の両方のフレーバーは、コンパイル時 (バイト コード操作または個別のコンパイル) またはクラス ロード時 (Load Time Weaver を使用する場合) に実装されます。

Spring AOP の最新バージョンと AspectJ の最新バージョンは@AspectJ-Syntax を共有していますが、互いに混同しないでください。Spring AOP はプロキシを使用して Spring Bean でのみ動作するため、外部からのメソッド呼び出しのみをインターセプトします。AspectJ はメソッドの実際のバイト コードを変更するため、Spring とは完全に独立して動作します。

さまざまなテクノロジーとフレーバーについて詳しく知りたい場合は、Spring Committer による Book AspectJ in Actionと AspectJ Guru Ramnivas Laddadをお勧めします。

以下もお読みください: Spring Reference: 8.4. 使用する AOP 宣言スタイルの選択

于 2012-11-15T16:47:55.670 に答える