インターフェース SmartClassLoader
ClassLoader がこのインターフェースを実装していない場合、そこから取得されたすべてのクラスは、再ロード可能 (つまり、キャッシュ可能) ではないと見なされます。
- 導入:
- 2.5.1
- 作成者:
- Juergen Hoeller
メソッドのサマリー
修飾子と型メソッド説明default ClassLoaderSE
この SmartClassLoader の元の ClassLoader を返すか、自給自足の場合は現在のローダー自体を返す可能性があります。default boolean
isClassReloadable
(ClassSE<?> clazz) 指定されたクラスが(この ClassLoader で)再読み込み可能かどうかを判断します。default ClassSE<?>
publicDefineClass
(StringSE name, byte[] b, ProtectionDomainSE protectionDomain) このクラスローダーでカスタムクラス(通常は CGLIB プロキシクラス)を定義します。
メソッドの詳細
isClassReloadable
指定されたクラスが(この ClassLoader で)再読み込み可能かどうかを判断します。通常、結果がキャッシュされるかどうか(この ClassLoader の場合)、または結果を毎回再取得する必要があるかどうかを確認するために使用されます。デフォルトの実装は常に
false
を返します。- パラメーター:
clazz
- チェックするクラス (通常、この ClassLoader からロードされます)- 戻り値:
- 後でクラスが(別の
Class
オブジェクトを使用して)再ロードされたバージョンに表示されると予想されるかどうか
getOriginalClassLoader
この SmartClassLoader の元の ClassLoader を返すか、自給自足の場合は現在のローダー自体を返す可能性があります。デフォルトの実装では、ローカルの ClassLoader 参照をそのまま返します。再ロード可能な場合や、通常はベースアプリケーションクラスローダーの影響を受けないクラスを処理するその他の選択的にオーバーライドされる ClassLoader の場合は、現在のローダーが派生した元の ClassLoader (たとえば、
return getParent();
経由) を返すように実装する必要があります。これは、ターゲットクラスが現在のクラスローダーで定義されていない場合に、特定のプロキシのクラスローダーを決定するために Spring の AOP フレームワークで特に使用されます。リロード可能なクラスローダーの場合、リロード可能なクラスローダー自体で定義されていない一般的なクラスをプロキシするための基本アプリケーションクラスローダーをお勧めします。
- 戻り値:
- オリジナルの ClassLoader (デフォルトで同じ参照)
- 導入:
- 5.3.5
- 関連事項:
publicDefineClass
default ClassSE<?> publicDefineClass(StringSE name, byte[] b, @Nullable ProtectionDomainSE protectionDomain) このクラスローダーでカスタムクラス(通常は CGLIB プロキシクラス)を定義します。これは、伝統的にリフレクションを介して呼び出される
ClassLoader
SE の保護されたdefineClass(String, byte[], int, int, ProtectionDomain)
メソッドのパブリック同等物です。カスタムクラスローダーでの具体的な実装では、JDK 9 以降で「不正アクセス」の警告なしにクラスローダー固有の定義を公開するために、その protected メソッドに委譲する必要があります:return defineClass(name, b, 0, b.length, protectionDomain)
。JDK 9+Lookup#defineClass
メソッドは、新しい定義のカスタムターゲットクラスローダーをサポートしていないことに注意してください。むしろ、ルックアップのコンテキストクラスと同じクラスローダーでクラスを常に定義します。- パラメーター:
name
- クラスの名前b
- クラスを定義するバイトprotectionDomain
- クラスの保護ドメイン(ある場合)- 戻り値:
- 新しく作成されたクラス
- 例外:
LinkageErrorSE
- クラス定義が悪い場合SecurityExceptionSE
- 無効な定義の試みの場合UnsupportedOperationExceptionSE
- カスタム定義の試みが不可能な場合 (このインターフェースのデフォルトの実装によってスローされます)- 導入:
- 5.3.4
- 関連事項: