1. ホーム
  2. java

[解決済み] JDKのダイナミックプロキシとCGLibの違いは何ですか?

2022-04-21 18:29:13

質問

の場合 プロキシデザインパターン とはどのような違いがあるのでしょうか? JDKの動的プロキシ のようなサードパーティの動的コード生成APIを使用することができます。 CGLib ?

両方のアプローチを使用することの違いは何ですか?また、どのような場合にどちらを選ぶべきですか?

どのように解決するのですか?

JDK Dynamic Proxy はインターフェースによるプロキシしかできません (従って、ターゲットクラスはインターフェースを実装する必要があり、 プロキシクラスもそれを実装する必要があります)。

CGLIB(およびjavassist)はサブクラス化によってプロキシを作成することができます。このシナリオでは、プロキシはターゲットクラスのサブクラスとなります。インターフェイスは必要ありません。

つまり、Java Dynamic プロキシはプロキシができるのです。 public class Foo implements iFoo ここで、CGLIBはプロキシできる。 public class Foo

EDITです。

javassistやCGLIBはサブクラス化によるプロキシを使用しているため、これに依存するフレームワークを使用する場合、finalメソッドを宣言したり、クラスをfinalにすることができないことをお伝えしておきます。これは、これらのライブラリがあなたのクラスをサブクラス化し、メソッドをオーバーライドすることを許可しないようにするためです。