org.seasar.framework.jpa.util
クラス AbstractClassLoader

java.lang.Object
  上位を拡張 java.lang.ClassLoader
      上位を拡張 org.seasar.framework.jpa.util.AbstractClassLoader
直系の既知のサブクラス:
ChildFirstClassLoader, TransformClassLoader

public abstract class AbstractClassLoader
extends java.lang.ClassLoader

未ロードのクラスを親クラスローダに委譲せず自身で処理するクラスローダのための抽象クラスです。

作成者:
taedium

フィールドの概要
protected  java.util.Set<java.lang.String> includedNames
          親クラスローダに委譲せずに自身で処理する対象となるクラス名のセット
 
コンストラクタの概要
AbstractClassLoader()
          インスタンスを構築します。
AbstractClassLoader(java.lang.ClassLoader parent)
          インスタンスを構築します。
AbstractClassLoader(java.lang.ClassLoader parent, java.util.Set<java.lang.String> includedNames)
          インスタンスを構築します。
 
メソッドの概要
protected abstract  java.lang.Class<?> doDefineClass(java.lang.String className, byte[] bytes)
          クラスを定義します。
protected  java.lang.Class<?> findClass(java.lang.String className)
           
protected  java.lang.Class<?> getSystemClass(java.lang.String className)
          クラス名で指定されたクラスをブートストラップクラスローダからロードできればそのクラスを返します。
protected  boolean isIncludedClass(java.lang.String className)
          クラス名が親クラスローダに委譲せずに自身で処理する対象の場合はtrueを、 それ以外の場合はfalseを返します。
protected  java.lang.Class<?> loadClass(java.lang.String className, boolean resolve)
           
protected  java.lang.Class<?> resolveClass(boolean resolve, java.lang.Class<?> clazz)
          resolvetrueであればクラスをリンクします。
 
クラス java.lang.ClassLoader から継承されたメソッド
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

includedNames

protected final java.util.Set<java.lang.String> includedNames
親クラスローダに委譲せずに自身で処理する対象となるクラス名のセット

コンストラクタの詳細

AbstractClassLoader

public AbstractClassLoader()
インスタンスを構築します。

コンテキストクラスローダからロードされるクラス及び、java.またはjavax.で始まるクラスは親クラスローダに委譲せずに自身で処理するように構成します。


AbstractClassLoader

public AbstractClassLoader(java.lang.ClassLoader parent)
インスタンスを構築します。

ブートストラップクラスローダからロードされるクラス及び、java.またはjavax.で始まるクラスは親クラスローダに委譲せずに自身で処理するように構成します。

パラメータ:
parent - 親クラスローダ

AbstractClassLoader

public AbstractClassLoader(java.lang.ClassLoader parent,
                           java.util.Set<java.lang.String> includedNames)
インスタンスを構築します。

includedNamesに含まれる名前のクラスのみ、 親クラスローダに委譲せずに自身で処理するように構成します。 ただし、ブートストラップクラスローダからロードされるクラス及び、 java.またはjavax.で始まるクラスを除きます。

パラメータ:
parent - 親クラスローダ
includedNames - 親より先にロードする対象となるクラス名のセット
メソッドの詳細

loadClass

protected java.lang.Class<?> loadClass(java.lang.String className,
                                       boolean resolve)
                                throws java.lang.ClassNotFoundException
オーバーライド:
クラス java.lang.ClassLoader 内の loadClass
例外:
java.lang.ClassNotFoundException

getSystemClass

protected java.lang.Class<?> getSystemClass(java.lang.String className)
クラス名で指定されたクラスをブートストラップクラスローダからロードできればそのクラスを返します。

パラメータ:
className - クラス名
戻り値:
ブートストラップクラスローダからロードしたクラス

isIncludedClass

protected boolean isIncludedClass(java.lang.String className)
クラス名が親クラスローダに委譲せずに自身で処理する対象の場合はtrueを、 それ以外の場合はfalseを返します。

親クラスローダに委譲せずに自身で処理する対象かどうかの判定は次の順で行われます。

  1. クラス名がjava.またはjavax.で始まるクラスは対象外
  2. コンストラクタでロード対象クラス名のセットが与えられなかった場合は対象
  3. コンストラクタでロード対象クラス名のセットが与えられた場合は、クラス名がセットに含まれていれば対象
  4. それ以外の場合は対象外

パラメータ:
className - クラス名
戻り値:
クラス名が親クラスローダに委譲せずに自身で処理する対象の場合はtrue

resolveClass

protected java.lang.Class<?> resolveClass(boolean resolve,
                                          java.lang.Class<?> clazz)
resolvetrueであればクラスをリンクします。

パラメータ:
resolve - クラスをリンクする場合はtrue
clazz - リンクするクラス
戻り値:
結果のClassオブジェクト

findClass

protected java.lang.Class<?> findClass(java.lang.String className)
                                throws java.lang.ClassNotFoundException
オーバーライド:
クラス java.lang.ClassLoader 内の findClass
例外:
java.lang.ClassNotFoundException

doDefineClass

protected abstract java.lang.Class<?> doDefineClass(java.lang.String className,
                                                    byte[] bytes)
クラスを定義します。

パラメータ:
className - クラス名
bytes - クラスファイル形式のバイト列
戻り値:
定義されたクラス


Copyright © 2004-2014 The Seasar Foundation. All Rights Reserved.