public class OverridingClassLoader extends DecoratingClassLoader
ClassLoader
。これにより、たとえば、オーバーライド ClassLoader でインスツルメンテーションを強制したり、特定の親でインストルメントされたバージョンのクラスを最終的にロードする前に、イントロスペクションの目的で選択されたアプリケーションクラスをオーバーライド ClassLoader
に一時的にロードする「スローアウェイ」クラスロード動作を強制できます。ClassLoader
。修飾子と型 | フィールドと説明 |
---|---|
static java.lang.String[] | DEFAULT_EXCLUDED_PACKAGES デフォルトで除外されるパッケージ。 |
コンストラクターと説明 |
---|
OverridingClassLoader(java.lang.ClassLoader parent) 指定された ClassLoader の新しい OverridingClassLoader を作成します。 |
OverridingClassLoader(java.lang.ClassLoader parent, java.lang.ClassLoader overrideDelegate) 指定された ClassLoader の新しい OverridingClassLoader を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected boolean | isEligibleForOverriding(java.lang.String className) 指定されたクラスがこのクラスローダーによるオーバーライドに適格かどうかを判断します。 |
protected byte[] | loadBytesForClass(java.lang.String name) 指定されたクラスの定義バイトをロードし、 ClassLoader.defineClass(byte[], int, int) 呼び出しを通じて Class オブジェクトに変換します。 |
java.lang.Class<?> | loadClass(java.lang.String name) |
protected java.lang.Class<?> | loadClass(java.lang.String name, boolean resolve) |
protected java.lang.Class<?> | loadClassForOverriding(java.lang.String name) この ClassLoader でオーバーライドするために、指定されたクラスをロードします。 |
protected java.io.InputStream | openStreamForClass(java.lang.String name) 指定されたクラスの InputStream を開きます。 |
protected byte[] | transformIfNecessary(java.lang.String name, byte[] bytes) サブクラスによって実装される変換フック。 |
excludeClass, excludePackage, isExcluded
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
public static final java.lang.String[] DEFAULT_EXCLUDED_PACKAGES
public OverridingClassLoader(@Nullable java.lang.ClassLoader parent)
parent
- ClassLoader をオーバーライドする ClassLoader を構築する public OverridingClassLoader(@Nullable java.lang.ClassLoader parent, @Nullable java.lang.ClassLoader overrideDelegate)
parent
- ClassLoader をオーバーライドする ClassLoader を構築する overrideDelegate
- オーバーライドするために委譲する ClassLoaderpublic java.lang.Class<?> loadClass(java.lang.String name) throws java.lang.ClassNotFoundException
java.lang.ClassLoader
の loadClass
java.lang.ClassNotFoundException
protected java.lang.Class<?> loadClass(java.lang.String name, boolean resolve) throws java.lang.ClassNotFoundException
java.lang.ClassLoader
の loadClass
java.lang.ClassNotFoundException
protected boolean isEligibleForOverriding(java.lang.String className)
className
- チェックするクラス名 DecoratingClassLoader.isExcluded(java.lang.String)
@Nullable protected java.lang.Class<?> loadClassForOverriding(java.lang.String name) throws java.lang.ClassNotFoundException
デフォルトの実装は、ClassLoader.findLoadedClass(java.lang.String)
、loadBytesForClass(java.lang.String)
、ClassLoader.defineClass(byte[], int, int)
に委譲します。
name
- クラスの名前 null
java.lang.ClassNotFoundException
- 指定された名前のクラスをロードできなかった場合 @Nullable protected byte[] loadBytesForClass(java.lang.String name) throws java.lang.ClassNotFoundException
ClassLoader.defineClass(byte[], int, int)
呼び出しを通じて Class オブジェクトに変換します。 デフォルトの実装は openStreamForClass(java.lang.String)
および transformIfNecessary(java.lang.String, byte[])
に委譲します。
name
- クラスの名前 null
java.lang.ClassNotFoundException
- 指定された名前のクラスをロードできなかった場合 @Nullable protected java.io.InputStream openStreamForClass(java.lang.String name)
デフォルトの実装は、親 ClassLoader の getResourceAsStream
メソッドを介して標準クラスファイルをロードします。
name
- クラスの名前 protected byte[] transformIfNecessary(java.lang.String name, byte[] bytes)
デフォルトの実装では、指定されたバイトがそのまま返されます。
name
- 変換されるクラスの完全修飾名 bytes
- クラスの生のバイト null
になることはありません。変換によって変更が生じなかった場合、入力バイトと同じ)