ホームページ >よくある問題 >cglib プロキシと jdk ダイナミック プロキシの違いは何ですか?

cglib プロキシと jdk ダイナミック プロキシの違いは何ですか?

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2023-06-12 10:36:5116185ブラウズ

cglib プロキシと jdk ダイナミック プロキシの違いは、JDK ダイナミック プロキシはインターフェイスに基づいてプロキシ オブジェクトのプロキシ インスタンスを作成するのに対し、Cglib プロキシは継承に基づいてプロキシ クラスのサブクラスを生成することです。

cglib プロキシと jdk ダイナミック プロキシの違いは何ですか?

このチュートリアルのオペレーティング システム: Windows 10 システム、jdk15 バージョン、Dell G3 コンピューター。

JDK 動的プロキシと Cglib プロキシはどちらも Java 言語でのプロキシの実装方法ですが、使用法、パフォーマンス、適用可能なシナリオの点で 2 つの間には特定の違いがあります:

1. JDK 動的プロキシ:

屏幕截图 2023-06-12 103510.png

  • インターフェイスに基づいて、プロキシされたオブジェクトのプロキシ インスタンスを作成します。オブジェクトをプロキシする場合、オブジェクトは 1 つ以上のインターフェイスを実装し、JDK ライブラリに依存する必要があります。 JDK 動的プロキシは、リフレクション メカニズムを使用して、プロキシ オブジェクトのすべてのインターフェイスを含むプロキシ クラスを生成し、ターゲット オブジェクトをプロキシできるインターフェイス内のすべてのメソッドをカバーします。

  • 利点: サードパーティのライブラリを参照する必要がなく、JRE ランタイム環境で実行でき、プロキシ オブジェクトの生成がより簡単かつ高速です。欠点: インターフェイスに基づくプロキシ処理のみが可能です。サポートされており、クラスはエージェントになることができないため、その役割は限定されています。

2. Cglib プロキシ:

屏幕截图 2023-06-12 103555.png

  • 継承に基づいてプロキシ クラスのサブクラスを生成し、追加しますプロキシロジック。プロキシされたクラスを継承するため、最終クラス、プライベート、静的などの継承不可能な属性の影響を受けます。

  • 利点: Cglib はクラスのプロキシをサポートしており、インターフェイスがない場合でも、コールバック インターフェイスを設定することで間接的に実現できます。 JDK ダイナミック プロキシよりもパフォーマンスが高く、インターフェイスを実装していないターゲット オブジェクトをプロキシできます。

プロキシ クラスを生成するプロセスでは、Cglib はバイトコードを動的に生成する方法を採用しています。プロキシ クラスは、プロキシ クラスによってロードされる前に作成され、メモリにキャッシュされます。呼び出しごとに、キャッシュされたプロキシ クラスが直接使用されます。ほとんどの場合、Cglib プロキシは、JDK 動的プロキシよりも大規模なメソッドのインターセプトおよび拡張シナリオに適しています。

以上がcglib プロキシと jdk ダイナミック プロキシの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。