ご存知のように、AOP は Spring の CGLIB / JDK Proxy によって提供されます。ウィービングは実行時に行われますか、それともアドバイスを含めるためにコンパイル時にバイトコードが変更されますか?
質問する
2428 次
1 に答える
2
Spring documentationによると、実行時に行われます:
Spring AOP はデフォルトで、AOP プロキシに標準の J2SE 動的プロキシを使用します。
Java の動的プロキシはインターフェイスでのみ機能するため、次のようになります。
Spring AOP は CGLIB プロキシも使用できます。これは、インターフェイスではなくクラスをプロキシするために必要です。
Spring のドキュメントには、プロキシがどのように機能するかについての適切な説明があります。
これをコンパイル時にウィービングが発生する AspectJ と比較してください。これは興味深いことに、さまざまな時点で発生する可能性があります。
ウィービング プロセス自体は、コンパイル時、コンパイル後、ロード時の 3 つの異なる時間のいずれかで実行できます。
AspectJ では:
- コンパイル時のウィービングは、ajc コンパイラを使用してソースをコンパイルすることによって行われます。
- コンパイル後の時間織りは、ajc コンパイラを使用して既存のクラス/jar にアスペクトを追加することによって行われます。
- ロード時のウィービングでは、再コンパイルせずにアスペクトを構成できますが、クラス ローダーによる特別なサポートが必要です (ロード時のウィービングは、クラスのロード時にウィービングを実行します)。これは通常、Java エージェント インストルメンテーションを介して実装され、他のウィービング時間よりもパフォーマンスが低下します。
于 2013-01-30T05:20:49.877 に答える