クラス OverridingClassLoader

既知の直属サブクラス
SimpleInstrumentableClassLoader, SimpleThrowawayClassLoader

public class OverridingClassLoader extends DecoratingClassLoader
通常のクラスローダーのように常に親ローダーに委譲するわけではない ClassLoader。これにより、たとえば、オーバーライド ClassLoader でインスツルメンテーションを強制したり、特定の親でインストルメントされたバージョンのクラスを最終的にロードする前に、イントロスペクションの目的で選択されたアプリケーションクラスをオーバーライド ClassLoader に一時的にロードする「スローアウェイ」クラスロード動作を強制できます。ClassLoader
導入:
2.0.1
作成者:
Rod Johnson, Juergen Hoeller
  • フィールドの詳細

    • DEFAULT_EXCLUDED_PACKAGES

      public static final StringSE[] DEFAULT_EXCLUDED_PACKAGES
      デフォルトで除外されるパッケージ。
  • コンストラクターの詳細

    • OverridingClassLoader

      public OverridingClassLoader(@Nullable ClassLoaderSE parent)
      指定された ClassLoader の新しい OverridingClassLoader を作成します。
      パラメーター:
      parent - ClassLoader をオーバーライドする ClassLoader を構築する
    • OverridingClassLoader

      public OverridingClassLoader(@Nullable ClassLoaderSE parent, @Nullable ClassLoaderSE overrideDelegate)
      指定された ClassLoader の新しい OverridingClassLoader を作成します。
      パラメーター:
      parent - ClassLoader をオーバーライドする ClassLoader を構築する
      overrideDelegate - オーバーライドするために委譲する ClassLoader
      導入:
      4.3
  • 方法の詳細

    • loadClass

      public ClassSE<?> loadClass(StringSE name) throws ClassNotFoundExceptionSE
      オーバーライド:
      クラス ClassLoaderSEloadClassSE 
      例外:
      ClassNotFoundExceptionSE
    • loadClass

      protected ClassSE<?> loadClass(StringSE name, boolean resolve) throws ClassNotFoundExceptionSE
      オーバーライド:
      クラス ClassLoaderSEloadClassSE 
      例外:
      ClassNotFoundExceptionSE
    • isEligibleForOverriding

      protected boolean isEligibleForOverriding(StringSE className)
      指定されたクラスがこのクラスローダーによるオーバーライドに適格かどうかを判断します。
      パラメーター:
      className - チェックするクラス名
      戻り値:
      指定されたクラスが適格かどうか
      関連事項:
    • loadClassForOverriding

      protected @Nullable ClassSE<?> loadClassForOverriding(StringSE name) throws ClassNotFoundExceptionSE
      この ClassLoader でオーバーライドするために、指定されたクラスをロードします。

      デフォルトの実装では、ClassLoader.findLoadedClass(String)SEloadBytesForClass(String) および ClassLoader.defineClass(byte[], int, int)SE に委譲されます。

      パラメーター:
      name - クラスの名前
      戻り値:
      Class オブジェクト、またはその名前にクラスが定義されていない場合は null 
      例外:
      ClassNotFoundExceptionSE - 指定された名前のクラスをロードできなかった場合
    • loadBytesForClass

      protected byte @Nullable [] loadBytesForClass(StringSE name) throws ClassNotFoundExceptionSE
      指定されたクラスの定義バイトをロードし、ClassLoader.defineClass(byte[], int, int)SE 呼び出しを通じて Class オブジェクトに変換します。

      デフォルトの実装は openStreamForClass(String) および transformIfNecessary(String, byte[]) に委譲します。

      パラメーター:
      name - クラスの名前
      戻り値:
      バイトコンテンツ(トランスフォーマがすでに適用されている)、またはその名前にクラスが定義されていない場合は null 
      例外:
      ClassNotFoundExceptionSE - 指定された名前のクラスをロードできなかった場合
    • openStreamForClass

      protected @Nullable InputStreamSE openStreamForClass(StringSE name)
      指定されたクラスの InputStream を開きます。

      デフォルトの実装は、親 ClassLoader の getResourceAsStream メソッドを介して標準クラスファイルをロードします。

      パラメーター:
      name - クラスの名前
      戻り値:
      指定されたクラスのバイトコードを含む InputStream
    • transformIfNecessary

      protected byte[] transformIfNecessary(StringSE name, byte[] bytes)
      サブクラスによって実装される変換フック。

      デフォルトの実装では、指定されたバイトがそのまま返されます。

      パラメーター:
      name - 変換されるクラスの完全修飾名
      bytes - クラスの生のバイト
      戻り値:
      変換されたバイト (null になることはありません。変換によって変更が生じなかった場合、入力バイトと同じ)