public class OverridingClassLoader extends DecoratingClassLoader
ClassLoader
。これにより、たとえば、オーバーライド ClassLoader でインスツルメンテーションを強制したり、特定の親でインストルメントされたバージョンのクラスを最終的にロードする前に、イントロスペクションの目的で選択されたアプリケーションクラスをオーバーライド ClassLoader
に一時的にロードする「スローアウェイ」クラスロード動作を強制できます。ClassLoader
。修飾子と型 | フィールドと説明 |
---|---|
static StringSE[] | DEFAULT_EXCLUDED_PACKAGES デフォルトで除外されるパッケージ。 |
コンストラクターと説明 |
---|
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<?> | loadClass(StringSE name) |
protected ClassSE<?> | loadClass(StringSE name, boolean resolve) |
protected ClassSE<?> | loadClassForOverriding(StringSE name) この ClassLoader でオーバーライドするために、指定されたクラスをロードします。 |
protected InputStreamSE | openStreamForClass(StringSE name) 指定されたクラスの InputStream を開きます。 |
protected byte[] | transformIfNecessary(StringSE name, byte[] bytes) サブクラスによって実装される変換フック。 |
excludeClass, excludePackage, isExcluded
clearAssertionStatusSE, defineClassSE, defineClassSE, defineClassSE, defineClassSE, definePackageSE, findClassSE, findLibrarySE, findLoadedClassSE, findResourceSE, findResourcesSE, findSystemClassSE, getClassLoadingLockSE, getPackageSE, getPackagesSE, getParentSE, getResourceSE, getResourceAsStreamSE, getResourcesSE, getSystemClassLoaderSE, getSystemResourceSE, getSystemResourceAsStreamSE, getSystemResourcesSE, registerAsParallelCapableSE, resolveClassSE, setClassAssertionStatusSE, setDefaultAssertionStatusSE, setPackageAssertionStatusSE, setSignersSE
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final StringSE[] DEFAULT_EXCLUDED_PACKAGES
public OverridingClassLoader(@Nullable ClassLoaderSE parent)
parent
- ClassLoader をオーバーライドする ClassLoader を構築する public OverridingClassLoader(@Nullable ClassLoaderSE parent, @Nullable ClassLoaderSE overrideDelegate)
parent
- ClassLoader をオーバーライドする ClassLoader を構築する overrideDelegate
- オーバーライドするために委譲する ClassLoaderpublic ClassSE<?> loadClass(StringSE name) throws ClassNotFoundExceptionSE
ClassLoaderSE
の loadClassSE
ClassNotFoundExceptionSE
protected ClassSE<?> loadClass(StringSE name, boolean resolve) throws ClassNotFoundExceptionSE
ClassLoaderSE
の loadClassSE
ClassNotFoundExceptionSE
protected boolean isEligibleForOverriding(StringSE className)
className
- チェックするクラス名 DecoratingClassLoader.isExcluded(java.lang.String)
@Nullable protected ClassSE<?> loadClassForOverriding(StringSE name) throws ClassNotFoundExceptionSE
デフォルトの実装では、ClassLoader.findLoadedClass(java.lang.String)
SE、loadBytesForClass(java.lang.String)
および ClassLoader.defineClass(byte[], int, int)
SE に委譲されます。
name
- クラスの名前 null
ClassNotFoundExceptionSE
- 指定された名前のクラスをロードできなかった場合 @Nullable protected byte[] loadBytesForClass(StringSE name) throws ClassNotFoundExceptionSE
ClassLoader.defineClass(byte[], int, int)
SE 呼び出しを通じて Class オブジェクトに変換します。 デフォルトの実装は openStreamForClass(java.lang.String)
および transformIfNecessary(java.lang.String, byte[])
に委譲します。
name
- クラスの名前 null
ClassNotFoundExceptionSE
- 指定された名前のクラスをロードできなかった場合 @Nullable protected InputStreamSE openStreamForClass(StringSE name)
デフォルトの実装は、親 ClassLoader の getResourceAsStream
メソッドを介して標準クラスファイルをロードします。
name
- クラスの名前 protected byte[] transformIfNecessary(StringSE name, byte[] bytes)
デフォルトの実装では、指定されたバイトがそのまま返されます。
name
- 変換されるクラスの完全修飾名 bytes
- クラスの生のバイト null
になることはありません。変換によって変更が生じなかった場合、入力バイトと同じ)