A. JDKの動的プロキシの特定の実装原理
-
InvocationHandletを実装することで、独自のコールプロセッサを作成するインタフェース。
-
インタフェースオブジェクトのプロキシクラスのセットを指定することにより、動的プロキシクラスローダを作成します。
-
唯一のパラメータタイプコールプロセッサインタフェースタイプである反射による動的プロキシクラスのコンストラクタを取得します。
-
パラメータにパラメータとしてハンドラを呼び出すように構成された動的プロキシクラスインスタンスコンストラクタオブジェクトを作成することによって、
JDKのダイナミックプロキシはプロキシが、ターゲットが新しい匿名プロキシクラスの何でも春、春の生産を行うことができないというインタフェースがない場合は、インタフェースモードのプロキシであることが実装AOPの強化を書き直し、Javaリフレクション機構を介してインターフェース、。
二つ。CGLIBのダイナミックプロキシ
CGLIBは、強力な、高性能生産するコードライブラリであるCGLIB、それにAOPアスペクト指向プログラミングを実現するために書き換えられ、親クラスによって動的プロキシクラスであることを、実行時に動的な拡張Javaランタイムクラス、春の連続を達成することができます。
III。両者の比較
-
JDKの動的プロキシは、インターフェース志向です。
CGLIBの動的プロキシ(プロキシクラスは、最終的なキーワードによって変更された場合、申し訳ありませんので、失敗)を達成プロキシクラスの根底にあるバイトコードによって継承されるべきです。 -
パフォーマンス:
高性能バージョンでJDKの動的プロキシオブジェクトが大幅に改善されてきたが二つの単語、JDKの旧バージョンで作成されたJDKの動的プロキシプロキシオブジェクト間の性能について、性能は、非常に高くはありません彼はまた、すべてのシナリオには適用されません。主に次の2つの指標で:
研究の高いJDKダイナミックプロキシロットよりも、実際の実行時のパフォーマンスで作成したCGLIB動的プロキシオブジェクトは、おそらく10倍を示しています。
それはより多くのJDKの動的プロキシロットにかかるよりも時間CGLIBは、オブジェクトを作成するときしかし、研究はその約8倍のギャップを示しています。
したがって、頻繁にせずにプロキシオブジェクトを作成するので、それはとにかく、CGLIBの動的プロキシに適している、プロキシオブジェクトまたはシングルトンプールのプロキシ例えば、JDKの動的プロキシに適しています。