パッケージ org.springframework.core
クラス OverridingClassLoader
java.lang.ObjectSE
java.lang.ClassLoaderSE
org.springframework.core.DecoratingClassLoader
org.springframework.core.OverridingClassLoader
通常のクラスローダーのように常に親ローダーに委譲するわけではない
ClassLoader
。これにより、たとえば、オーバーライド ClassLoader でインスツルメンテーションを強制したり、特定の親でインストルメントされたバージョンのクラスを最終的にロードする前に、イントロスペクションの目的で選択されたアプリケーションクラスをオーバーライド ClassLoader
に一時的にロードする「スローアウェイ」クラスロード動作を強制できます。ClassLoader
。- 導入:
- 2.0.1
- 作成者:
- Rod Johnson, Juergen Hoeller
フィールドのサマリー
フィールドコンストラクターの概要
コンストラクターコンストラクター説明OverridingClassLoader
(ClassLoaderSE parent) 指定された ClassLoader の新しい OverridingClassLoader を作成します。OverridingClassLoader
(ClassLoaderSE parent, ClassLoaderSE overrideDelegate) 指定された ClassLoader の新しい OverridingClassLoader を作成します。メソッドのサマリー
修飾子と型メソッド説明protected boolean
isEligibleForOverriding
(StringSE className) 指定されたクラスがこのクラスローダーによるオーバーライドに適格かどうかを判断します。protected byte[]
loadBytesForClass
(StringSE name) 指定されたクラスの定義バイトをロードし、ClassLoader.defineClass(byte[], int, int)
SE 呼び出しを通じて Class オブジェクトに変換します。ClassSE<?>
protected ClassSE<?>
protected ClassSE<?>
この ClassLoader でオーバーライドするために、指定されたクラスをロードします。protected InputStreamSE
openStreamForClass
(StringSE name) 指定されたクラスの InputStream を開きます。protected byte[]
transformIfNecessary
(StringSE name, byte[] bytes) サブクラスによって実装される変換フック。クラス org.springframework.core.DecoratingClassLoader から継承されたメソッド
excludeClass, excludePackage, isExcluded
クラス java.lang.ClassLoaderSE から継承されたメソッド
clearAssertionStatus, defineClassSE, defineClassSE, defineClassSE, defineClassSE, definePackageSE, findClassSE, findClassSE, findLibrarySE, findLoadedClassSE, findResourceSE, findResourceSE, findResourcesSE, findSystemClassSE, getClassLoadingLockSE, getDefinedPackageSE, getDefinedPackages, getName, getPackageSE, getPackages, getParent, getPlatformClassLoader, getResourceSE, getResourceAsStreamSE, getResourcesSE, getSystemClassLoader, getSystemResourceSE, getSystemResourceAsStreamSE, getSystemResourcesSE, getUnnamedModule, isRegisteredAsParallelCapable, registerAsParallelCapable, resolveClassSE, resourcesSE, setClassAssertionStatusSE, setDefaultAssertionStatusSE, setPackageAssertionStatusSE, setSignersSE
フィールドの詳細
DEFAULT_EXCLUDED_PACKAGES
デフォルトで除外されるパッケージ。
コンストラクターの詳細
OverridingClassLoader
指定された ClassLoader の新しい OverridingClassLoader を作成します。- パラメーター:
parent
- ClassLoader をオーバーライドする ClassLoader を構築する
OverridingClassLoader
public OverridingClassLoader(@Nullable ClassLoaderSE parent, @Nullable ClassLoaderSE overrideDelegate) 指定された ClassLoader の新しい OverridingClassLoader を作成します。- パラメーター:
parent
- ClassLoader をオーバーライドする ClassLoader を構築するoverrideDelegate
- オーバーライドするために委譲する ClassLoader- 導入:
- 4.3
メソッドの詳細
loadClass
- オーバーライド:
- クラス
ClassLoaderSE
のloadClassSE
- 例外:
ClassNotFoundExceptionSE
loadClass
- オーバーライド:
- クラス
ClassLoaderSE
のloadClassSE
- 例外:
ClassNotFoundExceptionSE
isEligibleForOverriding
指定されたクラスがこのクラスローダーによるオーバーライドに適格かどうかを判断します。- パラメーター:
className
- チェックするクラス名- 戻り値:
- 指定されたクラスが適格かどうか
- 関連事項:
loadClassForOverriding
@Nullable protected ClassSE<?> loadClassForOverriding(StringSE name) throws ClassNotFoundExceptionSE この ClassLoader でオーバーライドするために、指定されたクラスをロードします。デフォルトの実装では、
ClassLoader.findLoadedClass(java.lang.String)
SE、loadBytesForClass(java.lang.String)
およびClassLoader.defineClass(byte[], int, int)
SE に委譲されます。- パラメーター:
name
- クラスの名前- 戻り値:
- Class オブジェクト、またはその名前にクラスが定義されていない場合は
null
- 例外:
ClassNotFoundExceptionSE
- 指定された名前のクラスをロードできなかった場合
loadBytesForClass
指定されたクラスの定義バイトをロードし、ClassLoader.defineClass(byte[], int, int)
SE 呼び出しを通じて Class オブジェクトに変換します。デフォルトの実装は
openStreamForClass(java.lang.String)
およびtransformIfNecessary(java.lang.String, byte[])
に委譲します。- パラメーター:
name
- クラスの名前- 戻り値:
- バイトコンテンツ(トランスフォーマがすでに適用されている)、またはその名前にクラスが定義されていない場合は
null
- 例外:
ClassNotFoundExceptionSE
- 指定された名前のクラスをロードできなかった場合
openStreamForClass
指定されたクラスの InputStream を開きます。デフォルトの実装は、親 ClassLoader の
getResourceAsStream
メソッドを介して標準クラスファイルをロードします。- パラメーター:
name
- クラスの名前- 戻り値:
- 指定されたクラスのバイトコードを含む InputStream
transformIfNecessary
サブクラスによって実装される変換フック。デフォルトの実装では、指定されたバイトがそのまま返されます。
- パラメーター:
name
- 変換されるクラスの完全修飾名bytes
- クラスの生のバイト- 戻り値:
- 変換されたバイト (
null
になることはありません。変換によって変更が生じなかった場合、入力バイトと同じ)