春の学習-プロキシターゲットクラスの詳細な説明



Spring Learning Detailed Explanation Proxy Target Class



<aop:aspectj-autoproxy proxy-target-class='true' />

aop:aspectj-autoproxyの意識は次のとおりです。@ AspectJアノテーション駆動型アスペクトを開始します
では、*** proxy-target-class = 'true' ***はどういう意味ですか?

proxy-target-class属性は、プロキシの作成方法を決定します。
true:cglibプロキシを有効にします(クラスに基づく)
false:jdkプロキシを有効にします(インターフェースに基づく)



JDK動的プロキシは、リフレクションメカニズムを使用して、プロキシインターフェイスを実装する匿名クラスを生成し、特定のメソッドを呼び出す前にInvokeHandlerを呼び出してそれを処理します。

cglib動的プロキシは、asmオープンソースパッケージを使用してプロキシオブジェクトクラスのクラスファイルをロードし、バイトコードを変更してサブクラスを生成することで処理します。
(1)CGLibを使用して動的プロキシを実装します。 CGLibの最下層はASMバイトコード生成フレームワークを使用しており、プロキシクラスを生成するためのバイトコードテクノロジの使用は、Javaリフレクションを使用するよりも効率的です。



概要:高バージョンのSpringは、実行中のクラスに応じてJDKまたはCGLIBプロキシを自動的に選択します。 proxy-target-class属性を設定する必要はありません。 JDK動的プロキシはインターフェースの実装をシミュレートする方法であり、cglibはサブクラスの継承をシミュレートする方法です。前者は効率的であるため、一般的に使用されます。後者はお勧めしません。